Why we should avoid DateTime.UtcNow inside a Linq to Entities query?
Why we should avoid DateTime.UtcNow inside a Linq to Entities query?
Because we can get unexpected results!
After read this tip, will be expected results 😉
What is the diference between these two Linq queries?
Query 1
Query 2
SQL generated
The first one will generate a SQL with WHERE clause like this:
Where @p__linq__1 is the value of our filterDate variable.
The second one will generate this WHERE clause:
What is the problem?
Imagine that we’re using the second query inside some sync algorithm in our C# code, this algorithm is very sensitive about time, now imagine that the server where our C# code is running has a difference about seconds or minutes with the database server?
YES, UNEXPECTED RESULTS!
Conclusion
Linq to Entities is very smart and it is able to translate our DateTime.Now or DateTime.UtcNow to a matching command on database side.
The important here is: we should remember that it can do this and we should use features like these with parsimony.