我有这行代码
var count = materials.Where(i => i.MaterialType1 == MaterialType.Major).Count();
Resharper 提示我更改为
var count = materials.Count(i => i.MateriakType1 == MaterialType.Major);
为什么?有人告诉我改变的好处是什么?
如果总是更糟,我不会说第二个。这取决于上下文。
对于LINQ to Objects,最好使用第二个,因为它应该更快。我没有测试,所以这只是我的猜测。
但是,要小心像这样的更改,因为它们并不总是等价的。例如,如果您使用 LINQ to Entities,则第二个根本无法工作!这是因为LINQ to EntitiesCount
不支持使用谓词重载。
我认为这取决于你想如何使用它。假设您有一个查询:
var query=materials.Where(i => i.MaterialType1 == MaterialType.Major);
var query2=query. ... sub query
var result=query. ... some operation
var result=query.Count() ;
如果您在编写时考虑到延迟执行,那么我更愿意先编写查询并相应地使用它(而不是使用像 Count() 这样的贪婪运算符),但正如我所说的取决于场景。