Lambda/LINQ を使用して、複数のキーワードを含むセットを効率的にフィルタリングします
質問:
ラムダ式または LINQ を効率的に使用して、複数のキーワードに基づいてコレクションをフィルタリングするにはどうすればよいですか?
解決策:
質問に示されている例は、1 つのフィールド (ここでは「コメント」フィールド) で複数のキーワードをチェックする必要性を強調しています。単一のキーワードに基づいてフィルタリングする例はありますが、このロジックを複数のキーワードに拡張するには、より強力なアプローチが必要です。
ラムダ式メソッド:
回答で提供されている拡張メソッドを使用して、ラムダ式を使用してこの要件を達成できます。
<code class="language-csharp">var newList = MainList .FilterByItems(keywords, (m, k) => m.Comments.Contains(k), true) .ToList();</code>
LINQ メソッド:
また、LINQ を使用して同じ結果を達成することもできます。
<code class="language-csharp">var newList = MainList.Where(m => keywords.Any(k => m.Comments.Contains(k)));</code>
説明:
どちらのメソッドも、QueryableExtensions クラスの FilterByItems 拡張メソッドを使用します。このメソッドは、項目のコレクション、適用する述語、および「OR」または「AND」演算を実行するかどうかを示すブール値を受け入れます。
この例では、キーワードのリストを項目として渡し、Comments フィールドに各キーワードが含まれているかどうかを確認する述語を渡し、isOr を true に設定して「OR」演算を実行します。これにより、指定されたキーワードのいずれかがレコードに含まれている場合、それが結果に確実に含まれます。
FilterByItems 拡張メソッドの実装:
FilterByItems メソッドは ExpressionReplacer クラスを使用して実装されており、式の一部を置換できます。これは、各キーワードの存在を確認する述語を生成するために使用されます。
使用例:
FilterByItems メソッドを使用するには、フィルターするコレクション、チェックするキーワードのリストを提供し、オプションで isOr を「OR」演算の場合は true に、「AND」演算の場合は false に設定します。
<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>
以上がLambda/LINQ を使用して複数のキーワードに基づいてコレクションを効率的にフィルタリングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。