Qual é o efeito de AsEnumerable () em uma entidade LINQ?

Lendo as perguntas aqui e aqui me deu algumas dicas sobre a situação, e parece que usar o AsEnumerable consome memory. Existe uma maneira melhor de fazer isso LINQ e do jeito que é feito agora, os dados que saem são confiáveis?

Removendo os resultados AsEnumerable em um “seqüência local não pode ser usada em LINQ to SQL implementações de operadores de consulta, exceto o operador Contains”.

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

AsEnumerable() é efetivamente convertido em IEnumerable , o que faz com que a resolução de membros encontre membros de Enumerable vez de Queryable . Ele é geralmente usado quando você quer forçar parte de uma consulta a ser executada como SQL (ou similar) e o restante a ser executado usando o LINQ to Objects.

Veja minha postagem no blog Edulinq para mais informações.

Agora você realmente recebeu duas chamadas para AsEnumerable . Eu posso ver como remover o primeiro mas não o segundo poderia causar problemas, mas você já tentou remover 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 }; 

Usar AsEnumerable interromperá a consulta e fará a “parte externa” como linq-to-objects em vez de Linq-to-SQL. Efetivamente, você está executando um “select * from …” para ambas as suas tabelas e, em seguida, fazendo as junções, onde o filtro de cláusula, ordenação e projeção do lado do cliente.

Tenha cuidado ao usar AsEnumerable com o Entity Framework. Se sua tabela tiver muitos dados, sua consulta ficará lenta devido aos dados da primeira consulta e à cláusula apply where, ordering e projection.