&&和以及实体框架中的条件查询

时间:2015-05-06 07:18:20

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

实体框架查询中的条件与条件和两者之间的差异

代码1

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

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

代码2

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

  dbContext.Projects.Where(p=>p.ProjectId!=ProjectId &&  
  p.Name==Name).SingleOrDefault();
  • code1 code2 ????
  • 之间有什么区别?
  

两个查询都返回相同的值。但我不知道这些差异。请向我解释,哪一个更好。为什么?

3 个答案:

答案 0 :(得分:11)

如果您在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查询结构方面都没有区别。

答案 1 :(得分:3)

来自文档

  

返回值:

     

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

所以第二个where只会应用于第一个where的记录 - 这与&amp;&amp;你在代码2中构建的表达式。

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

答案 2 :(得分:1)

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