IT:AD:EF:HowTo:Query
<
/callout>
## Performance ##
- EF5 queries are 4 times slower than raw ADO.NET (compared to 23 times slower for EF4).
Summary
In EF one can:
Lazy
var departments = context.Departments;
foreach(var d in departments){ //Query #1
foreach(Cource c in d.Courses){ //Query #2
...
}
}
Eager
var departments = context.Departmetns.Include(d=>d.Courses)
foreach (var d in deaprtments){ //Query #1
...
}
Explicit
Same result as lazy really:
var departments = context.Departments;
foreach(var d in departments){ //Query #1
context.Entry(d).Collection(x=>x.Courses).Load();//Query #2
foreach(Cource c in d.Courses){
...
}
}
Include
- You need to
include System.Data.Entitybefore you can use Linq Include (rather than specifying everything with strings). - Absolute genius solution defined here
Example:
public static IQueryable<T> IncludeMultiple<T>(this IQueryable<T> query, params Expression<Func<T, object>>[] includes)
where T : class
{
if (includes != null)
{
query = includes.Aggregate(query,
(current, include) => current.Include(include));
}
return query;
}