LINQ to Entities中的動態WHERE子句(OR)
在LINQ中使用OR運算子建立動態查詢需要使用到PredicateBuilder,這是一個LINQKit實用程式。以下是實作方法:
<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
即可實現相同功能的Predicate Builder選項可在http://petemontgomery.wordpress.com/2011/02/10/a-universal-predicatebuilder/找到。
以上是如何在 LINQ to Entities 中使用 OR 建立動態 WHERE 子句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!