今天我遇到了一个 LINQ to objects(不是 SQL)的问题,由于打字错误而弹出。我有一个 .Select
一个地方和一个.Where
在另一个地方。我期待相同的结果,但他们显示不同的数字。假设 somelist
有 10 个元素,所有元素都有 qty
= 0
//returns 10 - basically count of all rows. I am expecting 0
somelist.Select(p => p.qty > 0).Count()
//returns 0 - the correct count
somelist.Where(p => p.qty > 0).Count()
如果同时选择和 where 返回 IEnumerable<T>
那为什么会模棱两可呢?谢谢。
最佳答案
Select
是一个投影,所以你得到的是表达式 p.qty > 0
对 somelist
中的每个元素进行评估.即很多真/假值(与原始列表相同的数字)。所以当你做 Count
在上面,你得到相同的数字。如果您查看选择将返回 IEnumerable<bool>
(因为 p.qty > 0
的类型是 bool)。
Where
过滤结果,以便计数在过滤后的列表上运行,并为您提供预期的结果。它的类型是 IEnumerable<TypeOfElementInOriginalList>
.
注意你也可以这样做:somelist.Count(p => p.qty > 0)
因为 Count 有一个 overload接受要过滤的谓词。
关于c# - linq在何处和选择上的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8142931/