Ein Projekt ist gerade von linq-zu-sql zu linq-zu-Entitäten gewechselt, und jetzt bekomme ich den Fehler
The LINQ expression node type 'ArrayIndex' is not supported in LINQ to Entities.
für diese Zeile:
var a = db.Table.Single(d => d.Date == dates[0]);
(Das Fixieren in diesem speziellen Fall ist einfach, wie in
var firstDate = dates[0];
var a = db.Table.Single(d => d.Date == firstDate);
)
Aber warum funktioniert das in linq-to-sql, aber nicht in linq-zu-Entitäten? Haben sie linq-zu-Entitäten schlechter gemacht als linq-to-sql? Was vermisse ich?
Das liegt daran, dass L2E nur versucht, Ihre Abfrage in einen SQL-Befehl zu übersetzen. Zusätzliche Dinge (Methoden wie .ToString () und andere Dinge, die nicht in SQL übersetzt werden können) führen daher zu dieser Ausnahme.
Allerdings implementiert L2S wie linq to objects IEnumerable. Das Ziel von ihnen ist also ein anderes: L2E zum Übersetzen von Linq-Abfragen in SQL-Befehle, L2O für die Verwendung von IEnumerable-Objekten im Arbeitsspeicher und L2S zum Modellieren und Arbeiten mit einer Datenbank.
Wenn Sie nun Ihre L2S-Abfragen in Ihrem EF-Projekt verwenden möchten (mithilfe von L2E), sollten Sie zunächst Ihre von DbContext abgerufenen Daten in IEnumerable konvertieren:
var a = db.Table.AsEnumerable().Single(d => d.Date == dates[0]);
// or any other methods...