在LINQ中使用Count()的最佳方法是什么?

5
我有这一行代码。
var count = materials.Where(i => i.MaterialType1 == MaterialType.Major).Count(); 

Resharper会提示我要更改为什么?
var count = materials.Count(i => i.MateriakType1 == MaterialType.Major); 

为什么要更改呢?有人能告诉我更改的好处吗?


8
显而易见的答案是:这只需要一个函数调用而不是两个,而且更短。 - Zruty
生成的 SQL 相等。 - Dannydust
2个回答

5

我不会说第二个一直更差,这要取决于上下文。

对于LINQ to Objects来说,最好使用第二种方式,因为它被认为更快。我没有测试过,所以这只是我的猜测。

然而,要小心这类更改,因为它们并不总是等价的。例如,如果你使用LINQ to Entities,第二种方法根本不起作用!这是因为带有谓词的Count重载不受LINQ to Entities支持


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()等贪婪操作符),但正如我所说,这取决于具体情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接