Solución:
AsEnumerable()
es efectivamente un elenco para IEnumerable<T>
, que hace que la resolución de miembros encuentre miembros de Enumerable
en lugar de Queryable
. Por lo general, se usa cuando desea forzar parte de una consulta para que se ejecute como SQL (o similar) y el resto para que se ejecute usando LINQ to Objects.
Consulte la publicación de mi blog de Edulinq para obtener más información.
Ahora realmente tienes dos llamadas a AsEnumerable
. Puedo ver cómo eliminar el primero pero no el segundo podría causar problemas, pero ¿ha intentado eliminar ambos?
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
};
El uso de AsEnumerable interrumpirá la consulta y hará la “parte externa” como linq-to-objects en lugar de Linq-to-SQL. Efectivamente, está ejecutando un “select * from …” para ambas tablas y luego haciendo las uniones, donde la cláusula filtra, ordena y proyecta el lado del cliente.
Tenga cuidado al usar AsEnumerable
con Entity Framework; si su tabla tiene muchos datos, su consulta puede ser lenta porque la consulta primero cargará datos y luego aplicará where
cláusula, ordenamiento y proyección.