LINQ:如果没有元素,All()会返回什么?

Axi*_*ili 12 .net c# linq entity-framework

这是一个非常简单的问题,但"全部"对谷歌来说是一个糟糕的关键词.

我想获得所有类别,其中没有产品更新,或没有任何产品.

换句话说,获取其所有产品尚未更新的所有类别,包括尚未包含任何产品的所有类别.

这是正确的表达吗?

var categs = context.Categories.Where(c => c.Products.All(x => !x.Updated));
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 18

它回来了true.从文档(强调我的):


如果源序列的每个元素都通过指定谓词中的测试,或者序列为空,返回值 true ; 否则,错误.

(这也是合乎逻辑的结论.序列中的所有元素确实通过了谓词,就像我所有的女儿都超过10英尺一样.我没有任何女儿的事实不会改变声明的真相:)

请参阅我的Edulinq博客文章Any以及All有关它们如何工作的更多详细信息.

  • @JonSkeet - 或者我们可以改写这个并说'如果任何元素未通过测试则返回false' - 对我来说,这使得你不存在的女儿的例子更清晰:-) (3认同)
  • `!foo.Any(!P)`? (3认同)