LINQ の動的 WHERE 句: 条件フィルターの作成
LINQ クエリでは、多くの場合、ユーザー入力またはランタイム変数に基づいて WHERE 句を動的に調整する必要があります。たとえば、Dictionary
動的フィルターを構築します:
動的な WHERE 句をアセンブルするには、LINQ ラムダ式の柔軟性を利用できます。 「.Where()」メソッドを使用すると、提供された辞書に基づいて複数のフィルター条件を連結できます。キーと値のペアごとに、属性が指定された値と一致するかどうかを確認する述語を構築します。
例:
<code class="language-csharp">var q = from c in db.ProductDetail where c.ProductGroupName == productGroupName && c.ProductTypeName == productTypeName // 在此处插入动态过滤器 select c; foreach (var kvp in filterDictionary) { // 为每一对键值对创建一个 lambda 表达式 Expression<Func<ProductDetail, bool>> predicate = (p => kvp.Key == null || p.GetType().GetProperty(kvp.Key).GetValue(p) != null && (kvp.Value == null || kvp.Value.Contains( p.GetType().GetProperty(kvp.Key).GetValue(p).ToString()))); // 将谓词链接到查询 q = q.Where(predicate); } q = q.OrderBy(c => c.ProductTypeName);</code>
リンク述語:
日付範囲フィルタリングなど、複数のフィルタを順番に適用する必要があるシナリオでは、追加の「.Where()」句を連鎖させてクエリの条件を絞り込むことができます。このアプローチにより、ユーザー定義のパラメーターに基づいた動的フィルタリングが可能になります。
サンプルコード:
<code class="language-csharp">var votes = db.Votes.Where(r => r.SurveyID == surveyId); if (fromDate != null) { votes = votes.Where(r => r.VoteDate.Value >= fromDate); } if (toDate != null) { votes = votes.Where(r => r.VoteDate.Value <= toDate); }</code>
以上がユーザー入力に基づいてデータをフィルターするために、LINQ で動的な WHERE 句を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。