Um projeto apenas mudou de linq para sql para linq para entidades, e agora recebo o erro
The LINQ expression node type "ArrayIndex" is not supported in LINQ to Entities.
para esta linha:
var a = db.Table.Single(d => d.Date == dates[0]);
(Corrigir neste caso em particular é fácil, como em
var firstDate = dates[0];
var a = db.Table.Single(d => d.Date == firstDate);
)
Mas por que isso funciona no linq-to-sql, mas não no linq-to-entities? Eles fizeram o linq-to-entities pior que o linq-to-sql? o que estou perdendo?
Respostas:
3 para resposta № 1Isso é porque o L2E apenas tenta traduzir sua consulta para um comando sql. Portanto, quaisquer coisas adicionais (métodos como .ToString () e outras coisas que não podem ser traduzidas para SQL) levam a essa exceção.
No entanto, L2S como linq para objetos implementaIEnumerable. Assim, o objetivo deles é diferente: L2E para traduzir consultas do linq para comandos sql, L2O para trabalhar com objetos IEnumerable na memória e L2S para modelar e trabalhar com um banco de dados.
Agora, se você quiser usar suas consultas L2S em seu projeto EF (usando L2E), primeiro converta seus dados recuperados de seu DbContext para IEnumerable:
var a = db.Table.AsEnumerable().Single(d => d.Date == dates[0]);
// or any other methods...