Home > Backend Development > C++ > How to Efficiently Filter a Collection Based on Multiple Keywords with Lambda/LINQ?

How to Efficiently Filter a Collection Based on Multiple Keywords with Lambda/LINQ?

DDD
Release: 2025-01-21 11:52:14
Original
934 people have browsed it

How to Efficiently Filter a Collection Based on Multiple Keywords with Lambda/LINQ?

Use Lambda/LINQ to efficiently filter sets containing multiple keywords

Question:

How to efficiently use Lambda expressions or LINQ to filter a collection based on multiple keywords?

Solution:

The example given in the question highlights the need to check for multiple keywords in one field (here the "Comments" field). While there are examples of filtering based on a single keyword, extending this logic to multiple keywords requires a more powerful approach.

Lambda expression method:

We can use the extension method provided in the answer to achieve this requirement using Lambda expressions:

<code class="language-csharp">var newList = MainList
   .FilterByItems(keywords, (m, k) => m.Comments.Contains(k), true)
   .ToList();</code>
Copy after login

LINQ method:

Alternatively, we can use LINQ to achieve the same result:

<code class="language-csharp">var newList = MainList.Where(m => keywords.Any(k => m.Comments.Contains(k)));</code>
Copy after login

Explanation:

Both methods use the FilterByItems extension method in the QueryableExtensions class. This method accepts a collection of items, a predicate to apply, and a Boolean value indicating whether to perform an "OR" or "AND" operation.

In our example, we pass the list of keywords as items, a predicate that checks if the Comments field contains each keyword, and sets isOr to true to perform an "OR" operation. This ensures that if a record contains any of the specified keywords, it is included in the results.

Implementation of FilterByItems extension method:

FilterByItems method is implemented using ExpressionReplacer class, which allows us to replace part of the expression. This is used to generate a predicate that checks for the presence of each keyword.

Example usage:

To use the FilterByItems method, we simply provide the collection to filter, a list of keywords to check, and optionally set isOr to true for an "OR" operation, or to false for an "AND" operation.

<code class="language-csharp">// 过滤“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);</code>
Copy after login

The above is the detailed content of How to Efficiently Filter a Collection Based on Multiple Keywords with Lambda/LINQ?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template