【问题标题】:Difference between && and where condition in entity framework query实体框架查询中&&和where条件的区别
【发布时间】:2015-07-16 04:37:44
【问题描述】:

实体框架查询中and条件与两个where条件的区别

代码 1

我在查询中使用了两个 where 条件

 dbContext.Projects.Where(p=>p.ProjectId!=ProjectId).Where(p=>p.Name==Name)
 .SingleOrDefault();

代码 2

我使用 && 条件而不使用两个 where 条件

  dbContext.Projects.Where(p=>p.ProjectId!=ProjectId &&  
  p.Name==Name).SingleOrDefault();

  • code1code2有什么区别????

两个查询都返回相同的值。但我不知道区别。请解释一下,哪个更好。为什么?

【问题讨论】:

  • 如果您的用户 projectid 与您正在检查的 projectid 相同,它们就不会相同
  • @pala_ ,怎么样?你能解释一下吗?我不明白
  • 看看生成的 sql 语句,你就会知道——我假设它们是相同的,所以没有区别。
  • 没关系 - 我完全看错了
  • 你想知道这个例子的区别或者你的问题是关于使用两个where而不是&&的利弊?

标签: c# performance entity-framework linq if-statement


【解决方案1】:

两个查询是相同的。但是Query 2 会给你更好的性能,因为&& 会在short-circuit 中帮助你。在第一个查询中,第一个 where 将产生结果并将其提供给第二个 where 子句,然后它将根据输入评估结果。如果您需要更多信息,请告诉我。

【讨论】:

  • 理论上是的,但我会看看生成的 sql - 注意它是 linq to sql (dbContext)。 linq 做了一些非常惊人的优化......
  • 是的,它确实优化了查询。但它仍然会按照优先顺序进行,不是吗? (不确定,在这种情况下)附加,一般布尔计算比 linq 快,对吧? :)
  • 当然,但我认为它将在 SELECT * WHERE ... AND .... 中结合使用这两个代码。对于 linq to sql,第二个 where 不会在结果集上执行,而是集成到第一个 - 我假设,但没有尝试过;-)
【解决方案2】:

来自文档

返回值:

一个 IEnumerable,它包含来自输​​入序列的元素 满足条件。

因此,第二个 where 将仅应用于在第一个 where 之后的记录 - 这与您在代码 2 中构建的 && 表达式相同。

见:https://msdn.microsoft.com/de-de/library/bb534803%28v=vs.110%29.aspx

【讨论】:

    【解决方案3】:

    如果您在 LinqPad 中打开查询,您将看到两个查询

    dbContext.Projects.Where(p=>p.ProjectId!=ProjectId).Where(p=>p.Name==Name)
    
    dbContext.Projects.Where(p=>p.ProjectId!=ProjectId && p.Name==Name);
    

    两者都会导致

    SELECT [...]
    FROM [...]
    WHERE p.ProjectId <> someId AND p.Name = 'something'
    

    无论是性能还是SQL查询结构都没有区别。

    【讨论】:

    • 打败了我,我只是在打字.. ;-)
    猜你喜欢
    • 2012-01-04
    • 2016-10-24
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多