作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
编辑 - 使用 IQueryable,而不是内存集合。
所以我基本上想添加基于某些标志的 Where 子句,但不让它们充当 AND。因此,假设我想要“Foo”为真或“Bar”为真的结果。我目前正在这样做...
results = results.Where(r => r.Foo || r.Bar);
这很好,但是有很多条件我需要添加 OR,如果我可以将它们一个接一个地链接起来,这将使代码更具可读性。
有没有像下面这样的简单方法,但使用 OR 而不是 AND。
if (something)
results = results.Where(r => r.Foo)
if (somethingElse)
results = results.Where(r => r.Bar)
如果我必须构建 Expression 对象和类似的东西,或者使用第 3 方库,这对我来说真的不值得,只是想知道是否有一些我没有看到的简单东西。
另外,我考虑过使用 Union()
,但它似乎执行速度较慢(尽管它更具可读性)。
一些可能有用的信息。基本上我的条件是用户角色。并且它们可以是任意组合的角色,但是每一个都应该在“结果”上加上一个OR条件。所以,是的,有人提到的枚举标志可以在这里提供帮助。
最佳答案
使用 PredicateBuilder。 http://www.albahari.com/nutshell/predicatebuilder.aspx
它只有十几行,它可以让你这样做:
Expression<...> filter = PredicateBuilder.False();
if (something)
filter = filter.Or(r => r.Foo);
if (somethingElse)
filter = filter.Or(r => r.Bar);
return results.Where(filter);
这为您提供了与您编写的所有相同的性能优势:
if (something && somethingElse)
return results.Where(r => r.Foo || r => r.Bar)
else if (something)
return results.Where(r => r.foo)
else if (somethingElse)
return results.Where(r => r.Bar)
etc...
关于c# - Entity Framework 多个 Where 语句作为 OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24536962/
我是一名优秀的程序员,十分优秀!