Lambda/LINQ マルチキーワード データベース フィールド検索
この記事では、Lambda/LINQ 式を使用して、データベース フィールド (コメント フィールドなど) 内の複数のキーワードを同時に効率的に検索する方法を紹介します。 従来の Contains
メソッドでは一度に 1 つのキーワードしか検索できませんが、この記事で説明するメソッドでは複数のキーワードを同時に処理できます。
ラムダ式を使用すると、次のようなクエリを作成できます。
<code class="language-csharp">var newList = MainList.Where(m => m.Comments.Contains(purposes));</code>
ただし、複数のキーワードを検索する必要がある場合は、より高度なテクニックが必要です。この目的のために、私たちは拡張メソッドを開発しました:
<code class="language-csharp">public static IQueryable<T> FilterByItems<T, TItem>(this IQueryable<T> query, IEnumerable<TItem> items, Expression<Func<T, TItem, bool>> filterPattern, bool isOr)</code>
この拡張メソッドは、メイン リスト MainList
、キーワード リスト items
、ラムダ式 filterPattern
(キーワードが Comments
フィールドに存在するかどうかを確認するために使用されます)、およびブール値 isOr
を受け取ります。 (キーワードを一致させるために OR または AND 演算子の使用を指定します)。
例:
<code class="language-csharp">var newList = MainList .FilterByItems(keywords, (m, k) => m.Comments.Contains(k), true) .ToList();</code>
このクエリは、Comments
フィールドに keywords
リスト内のキーワードが含まれるレコードのリストを返します。
FilterByItems 拡張メソッドの実装
FilterByItems
拡張メソッドは、ExpressionReplacer
クラスを利用して式を再帰的に変更し、特定の部分を目的の値に置き換えます。
以下は ExpressionReplacer
クラスの実装です:
<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) { Expression predicate = null; foreach (var item in items) { var itemExpr = Expression.Constant(item); var itemCondition = ExpressionReplacer.Replace(filterPattern.Body, filterPattern.Parameters[1], itemExpr); if (predicate == null) predicate = itemCondition; else { predicate = Expression.MakeBinary(isOr ? ExpressionType.OrElse : ExpressionType.AndAlso, predicate, itemCondition); } } predicate ??= Expression.Constant(false); var filterLambda = Expression.Lambda<Func<T, bool>>(predicate, filterPattern.Parameters[0]); return query.Where(filterLambda); } // ... (ExpressionReplacer class remains the same) ... }</code>
この改善された説明では、コードの機能とその使用方法がより明確に説明され、主要なセクションがより詳細に説明されます。
以上がLambda/LINQ を使用してデータベースフィールド内の複数のキーワードを効率的に検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。