ホームページ >バックエンド開発 >C++ >LINQ to Entities を使用して動的 OR クエリを作成するにはどうすればよいですか?

LINQ to Entities を使用して動的 OR クエリを作成するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-22 04:56:13768ブラウズ

How Can I Create a Dynamic OR Query with LINQ to Entities?

LINQ to Entities を使用して動的 OR クエリを構築する

LINQ to Entities では、遅延実行を使用して動的クエリを作成するのが非常に一般的です。ただし、これらのクエリでは通常、AND を使用して WHERE 条件を接続します。

OR ロジックを実装するには、つまり単一の識別子を使用して複数のプロパティを検索するには、LINQKit の PredicateBuilder を利用できます。これにより、述語を動的に構築できるようになります:

<code class="language-csharp">var query = from u in context.Users select u;
var pred = Predicate.False<user>();

if (type.HasFlag(IdentifierType.Username))
    pred = pred.Or(u => u.Username == identifier);

if (type.HasFlag(IdentifierType.Windows))
    pred = pred.Or(u => u.WindowsUsername == identifier);

return query.Where(pred.Expand()).FirstOrDefault();</code>
Entity Framework は呼び出し式を処理できないため、

Expand() メソッドは重要です。これを呼び出すと、LINQKit の式アクセサー クラスがアクティブになり、これらの式が Entity Framework が理解できる単純な構造に置き換えられます。

Expand() を指定しないと式が呼び出され、「LINQ 式ノード タイプ 'Invoke' は LINQ to Entities ではサポートされていません。」という例外が発生します。

別の述語ビルダー

その後、

なしで同じタスクを実行できる一般的な述語ビルダーが開発されました。 Expand()

https://www.php.cn/link/451e10de8e2fb18a9f795679b52dc9f6

以上がLINQ to Entities を使用して動的 OR クエリを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。