ホームページ > バックエンド開発 > C++ > ユーザー入力に基づいてデータをフィルターするために、LINQ で動的な WHERE 句を作成するにはどうすればよいですか?

ユーザー入力に基づいてデータをフィルターするために、LINQ で動的な WHERE 句を作成するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-14 07:19:47
オリジナル
999 人が閲覧しました

How Can I Build a Dynamic WHERE Clause in LINQ to Filter Data Based on User Input?

LINQ の動的 WHERE 句: 条件フィルターの作成

LINQ クエリでは、多くの場合、ユーザー入力またはランタイム変数に基づいて WHERE 句を動的に調整する必要があります。たとえば、Dictionary> として渡された LINQ クエリへのユーザー入力に基づいてデータをフィルター処理するフォーム チェックボックスについて考えてみましょう。

動的フィルターを構築します:

動的な 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート