C# 合并条件和多个Where方法调用之间有区别吗?

C# 合并条件和多个Where方法调用之间有区别吗?,c#,algorithm,linq,C#,Algorithm,Linq,这个多云的星期六早上,我坐在那里,心想: IEnumerable<SomeType> someThings = ..., conjunctedThings = someThings.Where(thing => thing.Big && thing.Tall), multiWhereThings = someThings .Where(thing => thing.Big).Where(thing => thing.Tall);

这个多云的星期六早上,我坐在那里,心想:

IEnumerable<SomeType>
  someThings = ...,
  conjunctedThings = someThings.Where(thing => thing.Big && thing.Tall),
  multiWhereThings = someThings
    .Where(thing => thing.Big).Where(thing => thing.Tall);
IEnumerable
某物=。。。,
conjunctedThings=someThings.Where(thing=>thing.Big&&thing.toll),
多事物=某物
.Where(thing=>thing.Big)Where(thing=>thing.toll);
直觉上,我会说,合并的事物的计算速度不会比多重事物慢,但在一般情况下真的有区别吗

我可以想象,根据大项目和高项目的份额,计算过程可能会有所不同,但我想忽略这一方面


我还需要考虑其他财产吗?例如,可枚举的类型或其他任何类型?

通常,多位置将较慢。它需要处理更多的项目并调用更多的lambda。

如果
某些东西
包含
n
项目,并且
m
中的
m
项目很大,则对共轭事物的lambda调用
n
次,而对多个位置的lambda调用
n+m
次。当然,如果两个序列的用户打算迭代所有内容,这是正确的。由于
Where
方法在内部执行
yield return
,迭代次数可能会减少,具体取决于集合的用户。换句话说,上面的数字是最坏情况下的估计。

这实际上取决于“…”。例如,看看实体框架。无论是对所有条件执行一个
Where
,还是对每个条件执行一个
Where
,调用枚举器时,所有
Where
都将压缩到一个SQL Where中。@CodeCaster谢谢。除了我提到的那些“Conjuncted”(很棒的词btw)
之外,是否愿意在依赖项周围画一些线,其中
选择
查询是通过LINQ对对象进行优化的。当你遇到性能问题时,最好的办法就是拿出秒表,两种方法都试一下。那你就知道了。你在这里得到的任何答案都是猜测。当你有一个绩效问题时,没有什么可以替代测量。@EricLippert感谢你用更好的语言表达我的想法和你的论点。@EricLippert检查真实案例将是完美的。问题是,我没有关于要筛选的数组内容的信息,请接受它将根据两个布尔属性进行筛选。我希望当把它们放在一起的时候,会有一个已知的优化(或者至少是一个普遍的共识)(甚至是令人惊叹的措辞,哈哈)。根据回复,我认为这样的代码是不存在的,如果我交付的代码会引起问题,那么我可以尝试另一个。谢谢谢谢你的答复。请允许我指出,我的问题中已经包括了这一特殊考虑(尽管我可以承认,可能会说得更清楚)。很显然,正如你所说,大个子和大个子的比例会影响你。还有什么?