Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between && and where condition in entity framework query

Difference between and condition and two where condition in entity framework query

Code 1

I have using two where condition in my query

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

code 2

I have using && condition without using two where condition

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

  • What is the difference between code1 and code2????

The both queries are return same value. but i don't know the differences. Please explain to me, which one is better. and why?

like image 346
Ramesh Rajendran Avatar asked May 06 '15 07:05

Ramesh Rajendran


3 Answers

If you open your query in LinqPad you will see that both queries

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

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

will result both in

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

There is no difference neither in performance nor in SQL query structure.

like image 121
Michael Mairegger Avatar answered Nov 15 '22 19:11

Michael Mairegger


From the documentation

Return value:

An IEnumerable that contains elements from the input sequence that satisfy the condition.

So the second where will only be applied to the records surviging the first where - which is identical to the && expression you built in code 2.

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

like image 24
Mario The Spoon Avatar answered Nov 15 '22 20:11

Mario The Spoon


Both queries are same. But Query 2 will give you better performance, as && will help you in short-circuit. In the first query, first where will yield the result and that will be given to 2nd where clause and then it will evaluate result based on the input. Let me know if you need more info.

like image 34
Abhishek Avatar answered Nov 15 '22 21:11

Abhishek