gpt4 book ai didi

c# - LINQ 中的多个 .Where() 语句是性能问题吗?

转载 作者:IT王子 更新时间:2023-10-29 04:44:11 25 4
gpt4 key购买 nike

我想知道多个 .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() 子句链是否会影响性能或者它们是否等效?

最佳答案

在 LINQ to Objects 中,性能影响非常小,因为基本上迭代器链会更长 - 获取下一个元素意味着在 MoveNext() 调用的长链上进行。

在 LINQ to SQL 和类似的提供程序中,我希望以任何一种方式生成相同的 SQL,因此不会影响那里的性能。

编辑:自从写这篇文章以来,我发现了更多关于 LINQ to Objects 实现的信息——它是 little more complicated ...

关于c# - LINQ 中的多个 .Where() 语句是性能问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4735531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com