LINQ to Entities の動的 WHERE 句 (OR)
LINQ で 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>
ただし、AsExpandable()
を使用することもできます:
<code class="language-csharp">return query.AsExpandable().Where(pred).FirstOrDefault();</code>
Expand
メソッドを使用すると、EF では処理できない呼び出し式を処理できます。これがないと例外がスローされます。
Expand
を使用せずに同じ機能を実現する別の述語ビルダー オプションは、http://petemontgomery.wordpress.com/2011/02/10/a-universal-predicatebuilder/ にあります。
以上がLINQ to Entities で OR を使用して動的な WHERE 句を構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。