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

标签 c# performance linq where clause

我想知道多个 .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/

相关文章:

c# - 引发异常C#后保持方法执行

c# - 不带 ref 关键字的引用传递

c# - 从通用列表 <Datarow> 转换为通用列表 <string> 时出错

c# - 带美国日期的 OrderBy Linq

c# - C# 中的 Lambda 示例

c# - await 在转移到与调用者相同的线程之前是否在内部创建另一个线程(对于 UI 应用程序)

javascript - Three.js - 对象出现在屏幕上的时间

算法性能说明 Ex : O(n)

mysql - 如何在 mysql 数据库中有效地存储和搜索每分钟数据?

linq - 按多列分组并计数