Leyendo las preguntas here y here me ha dado una idea de la situación, y parece que el uso de AsEnumerable consume memoria. ¿Hay una mejor manera de hacer este LINQ y la forma en que se hace ahora, es la información que sale confiable?¿Cuál es el efecto de AsEnumerable() en una entidad LINQ?
Eliminando los resultados de AsEnumerable en una "Secuencia local no se puede utilizar en implementaciones de LINQ to SQL de operadores de consultas excepto el operador Contiene".
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
};
me llegó el error al eliminar ambos AsEnumerables. (No he intentado eliminar solo uno). ¿Importa que los botines y las tarjetas de visita sean declaraciones LINQ? (una IQueryable y una Collection ) –
Andy
@Andy: Sí, el hecho de que 'spoils' sea una colección en memoria es definitivamente relevante. Supuse que era otra consulta DB. No sé de una manera de unirme medio a la mitad de la base de datos. ¿'Botines' * originalmente * provienen de la base de datos? –
los botines se crean teniendo 2 querrys, uno para los tops10 uno para los últimos 10, haciendo una unión en el resultado, y luego llenando la Colección por cada acción a través de esa unión. No estoy seguro de por qué no devolvemos la unión y la convertimos de una Iqueryable a una colección. (¿Volvería el IQuerryable a resolver la necesidad de los AsEnumerables?) – Andy