Lambda/LINQ를 사용하여 여러 키워드가 포함된 세트를 효율적으로 필터링
질문:
람다 표현식이나 LINQ를 효율적으로 사용하여 여러 키워드를 기반으로 컬렉션을 필터링하는 방법은 무엇입니까?
해결책:
질문에 제공된 예는 한 필드(여기서는 '댓글' 필드)에서 여러 키워드를 확인해야 한다는 점을 강조합니다. 단일 키워드를 기반으로 필터링하는 예가 있지만 이 논리를 여러 키워드로 확장하려면 더 강력한 접근 방식이 필요합니다.
람다 표현 방법:
답변에 제공된 확장 메서드를 사용하면 Lambda 표현식을 사용하여 이 요구 사항을 달성할 수 있습니다.
var newList = MainList .FilterByItems(keywords, (m, k) => m.Comments.Contains(k), true) .ToList();
LINQ 방법:
또는 LINQ를 사용하여 동일한 결과를 얻을 수도 있습니다.
var newList = MainList.Where(m => keywords.Any(k => m.Comments.Contains(k)));
설명:
두 방법 모두 QueryableExtensions 클래스의 FilterByItems 확장 방법을 사용합니다. 이 메서드는 항목 컬렉션, 적용할 조건자, "OR" 또는 "AND" 연산을 수행할지 여부를 나타내는 부울 값을 허용합니다.
이 경우에는 키워드 목록을 Comments 필드에 각 키워드가 포함되어 있는지 확인하는 조건자인 항목으로 전달하고 isOr를 true로 설정하여 "OR" 연산을 수행합니다. 이렇게 하면 레코드에 지정된 키워드가 포함되어 있으면 결과에 포함됩니다.
FilterByItems 확장 방법 구현:
FilterByItems 메서드는 표현식의 일부를 바꿀 수 있는 ExpressionReplacer 클래스를 사용하여 구현됩니다. 이는 각 키워드의 존재 여부를 확인하는 조건자를 생성하는 데 사용됩니다.
사용 예:
FilterByItems 메소드를 사용하려면 필터링할 컬렉션과 확인할 키워드 목록을 제공하고 선택적으로 "OR" 연산의 경우 isOr를 true로 설정하거나 "AND" 연산의 경우 false로 설정하면 됩니다.
// 过滤“Comments”字段中的关键词 var filteredList = MainList.FilterByItems(keywords, (m, k) => m.Comments.Contains(k)); // 使用OR操作包含任何匹配关键词的记录 var newList = MainList.FilterByItems(keywords, (m, k) => m.Comments.Contains(k), true);
위 내용은 Lambda/LINQ를 사용하여 여러 키워드를 기반으로 컬렉션을 효율적으로 필터링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!