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