5

我有这行代码

var count = materials.Where(i => i.MaterialType1 == MaterialType.Major).Count(); 

Resharper 提示我更改为

var count = materials.Count(i => i.MateriakType1 == MaterialType.Major); 

为什么?有人告诉我改变的好处是什么?

4

2 回答 2

5

如果总是更糟,我不会说第二个。这取决于上下文。

对于LINQ to Objects,最好使用第二个,因为它应该更快。我没有测试,所以这只是我的猜测。

但是,要小心像这样的更改,因为它们并不总是等价的。例如,如果您使用 LINQ to Entities,则第二个根本无法工作!这是因为LINQ to EntitiesCount支持使用谓词重载。

于 2013-10-21T05:23:16.867 回答
2

我认为这取决于你想如何使用它。假设您有一个查询:

var query=materials.Where(i => i.MaterialType1 == MaterialType.Major);
var query2=query.  ... sub query
var result=query.   ... some operation
var result=query.Count() ;

如果您在编写时考虑到延迟执行,那么我更愿意先编写查询并相应地使用它(而不是使用像 Count() 这样的贪婪运算符),但正如我所说的取决于场景。

于 2013-10-21T05:39:53.890 回答