有人可以告诉我如何在 LinQ 语句上做 OR 吗?例如,如果我有两种扩展方法:ByIdA()
和ByIdB()
. 然后我想使用它们类似于:
var yada = _something.Entity.ByIdA().ByIdB();
以上将调用两者并返回 A 和 B 都为真的行。如何编写它以使用 OR 并返回 A 或 B 为真的行?
我有一个带有子表 B 的 Icollection 的实体 A,所以我想从 A 返回行,其中 Ax = 1 或 By = 1。
您需要使用单个 where
_collection.Where(x => x.ByIdA() || x.ByIdB());
LINQ 可能不是解决这个问题的方法。每个 LINQ 方法都是独立运行的,所以如果你设法让你的 OR 在这样的链中,它将难以阅读,而且肯定难以理解和调试。
您可能只想 OR 老式的方式:
_something.Entity.Where(x => IsA(x) || IsB(x))
对于您问题的第一部分,可以使用:
var list = _something.Entity;
var result = Enumerable.Union(list.ByIdA(), list.ByIdB());
但是对于第二部分,这似乎是另一个问题,需要澄清这个问题。如果您的意思是每个 A 对象都有一个 B(s) 列表,并且您想要所有可以使用的 AA.x==1
对象A.Bs.Any(b=>b.y==1)
:
var result = list.Where(a => a.x==1 || a=>a.Bs.Any(b=>b.y==1));