What is the effect of AsEnumerable() on a LINQ Entity?
AsEnumerable()
is effectively a cast to IEnumerable<T>
, which makes member resolution find members of Enumerable
instead of Queryable
. It's usually used when you want to force part of a query to run as SQL (or similar), and the remainder to run using LINQ to Objects.
See my Edulinq blog post on it for more information.
Now you've actually got two calls to AsEnumerable
. I can see how removing the first but not the second could cause problems, but have you tried removing both?
var results = from p in pollcards
join s in spoils
on new { Ocr = p.OCR, fileName = p.PrintFilename }
equals new { Ocr = s.seq, fileName = s.inputFileName }
where p.Version == null
orderby s.fileOrdering, s.seq
select new ReportSpoilsEntity
{
seq = s.seq,
fileOrdering = s.fileOrdering,
inputFileName = s.inputFileName,
Ocr = p.OCR,
ElectorName = p.ElectorName
};
Using AsEnumerable will break off the query and do the "outside part" as linq-to-objects rather than Linq-to-SQL. Effectively, you're running a "select * from ..." for both your tables and then doing the joins, where clause filter, ordering, and projection client-side.
Be careful when using AsEnumerable
with Entity Framework; if your table has lots of data your query may be slow because the query will first load data and then apply where
clause, ordering and projection.