LINQ优化问题

时间:2011-06-01 17:52:54

标签: c# .net linq performance

如果我有以下代码,编译器是否实例化每个结果还是足够明智,只计算表中有多少相应的记录?如果没有,它可能会迫使我对更大的查询使用不同的策略。

from c in context.RendezVous
where c.RepID == repID &&
    c.DateHeureRV != null &&
    c.DateHeureRV.Value.Date == date.Date
select c).Count();

谢谢!

3 个答案:

答案 0 :(得分:4)

取决于context的类型。

如果这是一个Entity Framework或Linq to SQL查询,而contextIQueryable<T>,则查询将变为服务器上的SQL查询计数为单个整数。

如果这是一个内存中的集合(即:IEnumerable<T>),则每个项目按顺序迭代(Linq to Objects)并计算。

我怀疑前者是真的,因为你提到“table”并且你没有使用LINQ to Dataset扩展方法。在这种情况下,您将保持高效。

答案 1 :(得分:2)

这将执行(或多或少):

select count(*)
from rendezvous
where repid='...' and dateheurerv is not null and dateheurerv='...'

Linq将不会为查询添加任何实际开销,计数将在服务器端进行处理。

答案 2 :(得分:1)

这将使用您列出的三个WHERE条件执行SQL查询并返回匹配行的计数,它只会实现实际计数,而不是每行 - 如果这是您的问题。