代码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();
两个查询都返回相同的值。但我不知道这些差异。请向我解释,哪一个更好。为什么?
答案 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
子句,然后它将根据输入评估结果。如果您需要更多信息,请告诉我。