What is the effect of AsEnumerable() on a LINQ Entity?

c#, entity, enumerable, linq

Solution

`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
              };

Problem

Reading the questions here and here has given me some insight into the situation, and it seems like using the AsEnumerable is memory consuming. Is there a better way to do this LINQ and the way it is done now, is the data that comes out reliable? Removing the AsEnumerable results in a "Local sequence cannot be used in LINQ to SQL implementations of query operators except the Contains operator." ``` var results = from p in pollcards.AsEnumerable() join s in spoils.AsEnumerable() 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 }; ```

Original source

Related problems