我想知道多个.Where()语句是否存在性能影响。例如,我可以写:
var contracts = Context.Contract
.Where(
c1 =>
c1.EmployeeId == employeeId
)
.Where(
c1 =>
!Context.Contract.Any(
c2 =>
c2.EmployeeId == employeeId
&& c1.StoreId == c2.StoreId
&& SqlFunctions.DateDiff("day", c2.TerminationDate.Value, c1.DateOfHire.Value) == 1
)
)
.Where(
c1 =>
!Context.EmployeeTask.Any(
t =>
t.ContractId == c1.Id
)
);
或者我可以将它们全部组合到一个Where()子句中,如下所示:
var contracts = Context.Contract
.Where(
c1 =>
c1.EmployeeId == employeeId
&& !Context.Contract.Any(
c2 =>
c2.EmployeeId == employeeId
&& c1.StoreId == c2.StoreId
&& SqlFunctions.DateDiff("day", c2.TerminationDate.Value, c1.DateOfHire.Value) == 1
)
&& !Context.Employee_Task.Any(
t =>
t.ContractId == c1.Id
)
);
Where()子句链是否会影响性能或它们是否相同?
答案 0 :(得分:16)
在LINQ to Objects中,性能会受到很小影响,因为迭代器链基本上会更长 - 获取下一个元素意味着需要调用一长串MoveNext()调用。
在LINQ to SQL和类似的提供程序中,我希望以任何一种方式生成相同的SQL,因此它不会影响那里的性能。
编辑:自从编写本文后,我发现了更多关于LINQ to Objects实现的内容 - 它是little more complicated ...