在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中文网其他相关文章!