gpt4 book ai didi

c# - Entity Framework 多个 Where 语句作为 OR

转载 作者:太空狗 更新时间:2023-10-29 21:17:27 24 4
gpt4 key购买 nike

编辑 - 使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com