Un progetto è passato da linq-to-sql a linq-to-entities e ora ottengo l'errore
The LINQ expression node type 'ArrayIndex' is not supported in LINQ to Entities.
per questa linea:
var a = db.Table.Single(d => d.Date == dates[0]);
(Fissarlo in questo caso particolare è facile, come in
var firstDate = dates[0];
var a = db.Table.Single(d => d.Date == firstDate);
)
Ma perché funziona in linq-to-sql ma non in linq-to-entity? Hanno fatto linq-to-entity peggio di linq-to-sql? Cosa mi manca?
Questo perché L2E tenta semplicemente di tradurre la tua query in un comando sql. Quindi, qualsiasi altra cosa (metodi come .ToString () e altre cose che non possono essere tradotte in SQL) porta a quell'eccezione.
Tuttavia, L2S come linq agli oggetti implementa IEnumerable. Quindi, l'obiettivo di loro è diverso: L2E per tradurre le query linq in comandi sql, L2O per lavorare con oggetti IEnumerable in-memory e L2S per modellare e lavorare con un database.
Ora, se vuoi essere in grado di utilizzare le tue query L2S nel tuo progetto EF (utilizzando L2E), devi prima convertire i tuoi dati recuperati da DbContext in IEnumerable:
var a = db.Table.AsEnumerable().Single(d => d.Date == dates[0]);
// or any other methods...