【问题标题】:Is there a difference in performance how a linq expression is constructed?构造 linq 表达式的性能是否存在差异?
【发布时间】:2012-08-06 08:44:34
【问题描述】:

性能是否会因where 子句在 linq 表达式中的位置而有所不同?

看看下面的代码:

dbContext.AnEntity.Include("AnotherEntity").Where(e => e.ID == id).ToList();

dbContext.AnEntity.Where(e => e.ID == id).Include("AnotherEntity").ToList();

这两个表达式的执行计划是相同还是不同?

【问题讨论】:

  • 你确定你的代码真的编译了吗?在ObjectQuery<T> 实例上调用Include,但Where(some lambda expression here) 方法返回IQueryable<T>。我认为您实际上无法选择放置Include 的位置。

标签: .net performance linq


【解决方案1】:

理论上,不会。实际上,您将需要逐个测试,并在逐个提供者的基础上进行测试。对于一个相关(但略有不同)的示例,在 L2S 中很长一段时间内,.Where(predicate).FirstOrDefault() 和 .FirstOrDefault(predicate)(具有相同的语义)不具有相同的行为(特别是与身份映射快捷方式)。

我预计它会是一样的,特别是因为.Include(扩展结果集)与.Where(谓词)相比,属于一个单独的类别,但是:唯一的方法验证将是对其进行测试并比较生成的 SQL 和性能。

【讨论】:

  • “messen ist wissen”(“衡量就是知道”)
猜你喜欢
  • 1970-01-01
  • 2014-06-29
  • 2022-07-22
  • 1970-01-01
  • 2014-05-17
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多