OR ロジックを使用して、LINQ to Entities で動的な WHERE 句を構築します
LINQ to Entities は遅延実行を使用して動的クエリを構築します。ただし、これらのクエリでは通常、AND を使用して WHERE 条件を接続します。 OR ロジックを実装するには、LINQKit などの述語ビルダー ライブラリの使用を検討してください。
LINQKit の PredicateBuilder を使用する
LINQKit では、PredicateBuilder を使用して述語を動的に構築できます。提供されたコードの修正バージョンは次のとおりです:
<code class="language-c#">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>
Expand()
メソッドは、呼び出し側の式を Entity Framework が理解できる単純な構造に置き換えます。これがないと、クエリの実行中に例外が発生します。
その他の述語ビルダー
代わりに、Peter Montgomery のユニバーサル述語ビルダーの使用を検討してください: https://www.php.cn/link/cfaedf8d25fee6179bfc4bcb64bbbfbd()`。
以上がLINQ to Entities で OR ロジックを使用して動的な WHERE 句を構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。