OR 条件を使用した動的 LINQ to Entities クエリの構築
動的 LINQ クエリを作成するには、多くの場合、複数の WHERE 句を組み合わせる必要があります。 標準の LINQ は AND 条件を簡単に処理できますが、動的な OR 条件を構築するのは困難です。 この記事では、LINQKit の PredicateBuilder
を使用してこれを実現するソリューションを示します。
重要なのは、PredicateBuilder
を活用して柔軟な述語を作成し、Entity Framework との互換性を確保することです。 次のコードは、このアプローチの例を示しています。
<code class="language-csharp">var query = from u in context.Users select u; var pred = PredicateBuilder.False<User>(); // Start with a predicate that's always false if (type.HasFlag(IdentifierType.Username)) pred = pred.Or(u => u.Username == identifier); if (type.HasFlag(IdentifierType.Windows)) pred = pred.Or(u => u.WindowsUsername == identifier); // Corrected parenthesis return query.Where(pred.Expand()).FirstOrDefault(); // or return query.AsExpandable().Where(pred).FirstOrDefault();</code>
重要なのは、pred.Expand()
または query.AsExpandable()
の使用に注意してください。 PredicateBuilder
は Entity Framework が直接サポートしていない式を作成するため、これは不可欠です。 Expand()
(または AsExpandable()
) は、LINQKit の式ビジターを利用して、これらの式を Entity Framework と互換性のある形式に変換し、例外を防ぎます。
代わりに、Peter Montgomery による実装 (PredicateBuilder
https://www.php.cn/link/451e10de8e2fb18a9f795679b52dc9f6) など、他の 実装を検討することを検討してください。明示的な Expand()
呼び出しが必要です。 これにより、LINQ to Entities クエリ内で動的 OR 条件を構築するための合理化されたアプローチが提供されます。
以上が動的 LINQ to Entities クエリで WHERE 句を連結するために OR ロジックを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。