linq歧义在哪里和选择

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有一个重载,它接受一个谓词来过滤.