使用 OR 條件建立動態 LINQ to Entities 查詢
建立動態 LINQ 查詢通常需要組合多個 WHERE 子句。 雖然標準 LINQ 可以輕鬆處理 AND 條件,但建構動態 OR 條件卻提出了挑戰。 本文示範了使用 LINQKit 的 PredicateBuilder
來實現此目的的解決方案。
關鍵是利用 PredicateBuilder
進行靈活的謂詞創建並確保與實體框架的兼容性。 以下程式碼舉例說明了這種方法:
<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
建立實體框架不直接支援的表達式。 Expand()
(或 AsExpandable()
)利用 LINQKit 的表達式存取器將這些表達式轉換為與實體框架相容的形式,從而防止異常。
PredicateBuilder
以上是如何使用 OR 邏輯連接動態 LINQ to Entities 查詢中的 WHERE 子句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!