Un proyecto acaba de cambiar de linq-to-sql a linq-to-entres y ahora aparece el error.
The LINQ expression node type 'ArrayIndex' is not supported in LINQ to Entities.
para esta linea:
var a = db.Table.Single(d => d.Date == dates[0]);
(Repararlo en este caso particular es fácil, como en
var firstDate = dates[0];
var a = db.Table.Single(d => d.Date == firstDate);
)
Pero, ¿por qué funciona esto en linq-to-sql pero no en linq-to-entero? ¿Hicieron que los linq-to-enteres sean peores que los linq-to-sql? ¿Qué me estoy perdiendo?
Eso es porque L2E simplemente intenta traducir su consulta a un comando sql. Por lo tanto, cualquier cosa adicional (métodos como .ToString () y otras cosas que no se pueden traducir a SQL) lleva a esa excepción.
Sin embargo, L2S como linq to implementos IEnumerable. Por lo tanto, el objetivo de ellos es diferente: L2E para traducir las consultas de linq a comandos sql, L2O para trabajar con objetos IEnumerables en memoria y L2S para modelar y trabajar con una base de datos.
Ahora, si desea poder utilizar sus consultas L2S en su proyecto EF (usando L2E), primero debe convertir los datos recuperados de su DbContext a IEnumerable:
var a = db.Table.AsEnumerable().Single(d => d.Date == dates[0]);
// or any other methods...