2013-10-21 49 views
5

我有这行代码在LINQ中使用Count()的最佳方式是什么?

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

其中ReSharper的提示我改变

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

为什么?任何人都能告诉我改变的好处是什么?

+8

好吧,显而易见的答案是:这是一个函数调用,而不是两个,它更短。 – Zruty

+0

生成的SQL是相等的。 – Dannydust

回答

5

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

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

但是,要小心这样的变化,因为它们并不总是等价的。例如。如果你使用LINQ to Entities,那么第二个将不会工作!这是因为Count带谓词的过载不是supported by 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()),但正如我所说依赖在场景中。

相关问题