Enumerable.Where(谓词)与Enumerable.All(谓词)

时间:2014-03-27 09:42:01

标签: c# .net linq

有什么区别:

items.Where(i => i.Foo == "bar")

items.All(i => i.Foo == "bar")

?看起来他们做的事情完全相同 - 实际情况如何,或者他们是否以某种微妙的方式表现出不同的行为?

3 个答案:

答案 0 :(得分:8)

Where<T>会返回IEnumerable<T>并充当您收藏的过滤器:

  

Enumerable.Where方法

     

根据谓词过滤一系列值。

在您的情况下,它会返回Foo属性等于"bar"的所有元素。


All<T>返回bool,只检查集合中的所有元素是否满足给定的谓词:

  

可枚举。所有方法

     

确定序列的所有元素是否满足条件。

在您的情况下,当所有元素的true属性等于Foo时,它会返回"bar",否则为false

答案 1 :(得分:5)

items.Where - 根据条件过滤并返回过滤对象的集合。

items.All - 如果集合中的所有对象都满足条件,则返回true,否则返回false

看起来不一样,是吗?

答案 2 :(得分:4)

Enumerable.All 会返回一个bool值,指示所有相关元素是否满足谓词所表达的条件。

Enumerable.Where 返回一个通用IEnumerable集合,该集合仅包含满足上述条件的项目。

我没有看到从这些LINQ函数返回的结果之间有任何共同点 - 一个是bool,另一个是集合。是的,它们的语法相似,但在完全不同的情况下使用。

一个简单的例子: 假设你有一个int列表:

  

列出sampleList = new List {3,4,6,9};

如果你跑

sampleList.All(v => v % 3 == 0);

你会得到假,因为4不满足条件。

如果你跑

  

sampleList.Where(v =&gt; v%3 == 0);

您将收到一个 IEnumerable ,其中包含满足条件的值:3,6和9 /