如果我有以下代码,编译器是否实例化每个结果还是足够明智,只计算表中有多少相应的记录?如果没有,它可能会迫使我对更大的查询使用不同的策略。
from c in context.RendezVous
where c.RepID == repID &&
c.DateHeureRV != null &&
c.DateHeureRV.Value.Date == date.Date
select c).Count();
谢谢!
答案 0 :(得分:4)
取决于context
的类型。
如果这是一个Entity Framework或Linq to SQL查询,而context
是IQueryable<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查询并返回匹配行的计数,它只会实现实际计数,而不是每行 - 如果这是您的问题。