对于开箱即用的 Linq 方法,简短的回答是“否”,原因如下:
我了解 OP 处理IQueryable<T>
和不处理IEnumerable<T>
,但前者中可用的功能基于后者。
IEnumerable<T>
Linq(或 Linq to Objects)的工作原理是将各种 linq 方法的执行推迟到迭代集合为止,即使迭代开始,它也只执行生成集合中的下一个项目所需的工作。
因为我们在谈论 WHERE,所以我们在谈论过滤功能。假设你有Base.Where(ConditionA).Where(ConditionB).Where(ConditionC)
. 在运行时,这是通过遍历基本集合来处理的,直到找到满足的第一个项目,ConditionA
然后将该项目传递给下一个函数。如果该项目满足ConditionB
,则将其传递给ConditionC
,如果该项目不满足ConditionB
,ConditionB
则从 请求下一个项目ConditionA
,为了ConditionA
获得下一个项目,它会继续迭代 ,Base
直到找到另一个满足 的项目ConditionA
,然后ConditionB
测试看看新项目是否满足,以此类推。
在这种类型的工作流中不存在an 的原因.OrWhere()
是,前面的语句需要知道它正在将结果传递给这样的函数,并且它本质上需要传递它遇到的每个项目(即使条件不满足),但无论是否满足,都会传递很长时间。这给原本简单的操作增加了很多复杂性。
希望这可以帮助...