I know some differences of LINQ to Entities and LINQ to Objects which the first implements IQueryable
and the second implements IEnumerable
and my
Encountered a bad performance on below code.
void DoSomething(IEnumerable objects){
var single = objects.First(); //load everything into memory before .First()
...
}
Fixed with
void DoSomething(IEnumerable objects){
T single;
if (objects is IQueryable)
single = objects.AsQueryable().First(); // SELECT TOP (1) ... is used
else
single = objects.First();
}
For an IQueryable, stay in IQueryable when possible, try not be used like IEnumerable.
Update. It can be further simplified in one expression, thanks Gert Arnold.
T single = objects is IQueryable q?
q.First():
objects.First();