使用包含条件的Lambda/LINQ进行多关键字搜索
本指南演示如何同时在评论列表中搜索多个关键字。虽然针对单个关键字搜索的示例很多,但本指南提供了一种一次性搜索任何关键字实例的解决方案。
实现此目标,可以采取以下步骤:
<code class="language-csharp">public static class QueryableExtensions { public static IQueryable<T> FilterByItems<T, TItem>(this IQueryable<T> query, IEnumerable<TItem> items, Expression<Func<T, TItem, bool>> filterPattern, bool isOr) { // ... 方法实现 ... } }</code>
<code class="language-csharp">var newList = MainList .FilterByItems(keywords, (m, k) => m.Comments.Contains(k), true) .ToList();</code>
此处,FilterByItems
方法生成一个执行所需过滤的谓词。keywords
参数表示搜索词列表,提供的 lambda 表达式检查 Comments
字段是否包含任何这些关键字。isOr
参数决定过滤是逻辑 OR(任何关键字匹配)还是逻辑 AND(所有关键字匹配)。
FilterByItems
方法通过循环遍历关键字来构建谓词。它用每个关键字替换提供的 lambda 表达式中的参数,为每个关键字创建一个单独的条件。最后,它根据 isOr
值使用 OR 或 AND 组合这些条件,创建一个可以应用于查询的单个谓词。
ExpressionReplacer
类用于替换 lambda 表达式中的表达式。它以表达式字典作为输入,并修改原始表达式,替换与字典中匹配的表达式。这允许根据提供的关键字动态修改谓词。
通过这种方法,可以使用 Lambda/LINQ 语法有效且高效地在评论中搜索多个关键字。
以上是如何使用 Lambda/LINQ 在评论列表中搜索多个关键字?的详细内容。更多信息请关注PHP中文网其他相关文章!