在LINQ to Entities使用OR邏輯建構動態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中文網其他相關文章!