c# - 两个相等性检查在一个 Where 中,反之亦然以提高效率

标签 c# .net linq linq-to-sql

在 linq-to-sql 中,我们期望哪个示例(如果有)的评估效率更高/更快?他们编译成同一个sql吗?在这些示例之间进行选择时,还有其他我应该考虑的因素吗?

(使用 DbContext 上下文)

context.Events
   .Where(evt => evt.Date <= endDate && evt.Date > startDate);

或者...

context.Events
   .Where(evt => evt.Date <= endDate)
   .Where(evt => evt.Date > startDate);

最佳答案

正如 juharr 上面所说,两者都生成完全相同的 SQL 查询。

出于好奇,我对自己的数据库进行了时间测试,发现 && 生成查询的速度相当快。

            for (int i = 0; i < 500; i++)
            {
                var wko = db.WorkOrders
                    .Where(evt => DateTime.Now > evt.LastModified)
                    .Where(evt => DateTime.Now > evt.Opened);
            }
            for (int i = 0; i < 500; i++)
            {
                var wko2 = db.WorkOrders
                    .Where(evt => DateTime.Now > evt.LastModified && DateTime.Now > evt.Opened);
            }

第一个循环在 <= 24 毫秒内完成 第二个循环在 <= 16ms 内完成

我确信这通常对您的表现影响很小,但仅供引用。

关于c# - 两个相等性检查在一个 Where 中,反之亦然以提高效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41744142/

相关文章:

c# - 是否可以使用 Rhino Mocks 来 stub 我不关心类型的通用方法?

c# - 处理 DataContext 和代码分析消息

c# - 正则表达式中的子表达式

c# - 将 MEF 与通用基类一起使用

c# - 定义类型别名

.net - 默认参数和反射 : if ParameterInfo. IsOptional 那么DefaultValue总是可靠的吗?

asp.net - Global.asax PostAuthenticateRequest 事件绑定(bind)是如何发生的?

c# - 如何在 c# 中对两个列表进行笛卡尔连接?

linq - 如何使用 LINQ 等待 ParallelQuery?

vb.net - LINQ 集合中的 Where 语句