ホームページ > バックエンド開発 > C++ > 動的 LINQ to Entities クエリで WHERE 句を連結するために OR ロジックを使用するにはどうすればよいですか?

動的 LINQ to Entities クエリで WHERE 句を連結するために OR ロジックを使用するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-22 05:11:07
オリジナル
899 人が閲覧しました

How Can I Use OR Logic for Concatenating WHERE Clauses in Dynamic LINQ to Entities Queries?

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 による実装 (PredicateBuilderhttps://www.php.cn/link/451e10de8e2fb18a9f795679b52dc9f6) など、他の 実装を検討することを検討してください。明示的な Expand() 呼び出しが必要です。 これにより、LINQ to Entities クエリ内で動的 OR 条件を構築するための合理化されたアプローチが提供されます。

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

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