Gul*_*llu 8 c# linq vb.net lambda c#-4.0
今天我遇到了一个问题,LINQ对象(不是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()
Run Code Online (Sandbox Code Playgroud)
如果两者都选择和返回IEnumerable<T>
那么为什么模棱两可?谢谢.
Geo*_*ett 18
Select
是一个投影,所以你得到的是p.qty > 0
为每个元素评估的表达式somelist
.即大量的真/假值(与原始列表相同的数字).所以,当你这样做Count
时,你会获得相同的数字.如果你看看select将返回IEnumerable<bool>
(因为类型p.qty > 0
是bool).
Where
过滤结果,以便count在已过滤的列表上运行,并为您提供预期的结果.这种类型是IEnumerable<TypeOfElementInOriginalList>
.
请注意,您也可以这样做:somelist.Count(p => p.qty > 0)
因为Count有一个重载,它接受一个谓词来过滤.
归档时间: |
|
查看次数: |
1358 次 |
最近记录: |