Entity Framework LINQ erkennt Methode nicht
Ausnahme: LINQ to Entities erkennt die Methode nicht
Dies ist die häufigste Ausnahmebedingung, wenn Sie mit dem Entity Framework arbeiten und Daten innerhalb des IQueryable-Ergebnisses zum Filtern konvertieren.
using (var context = new CustomerContext())
{
var item = context.InvoiceItems
.Where(i => i.Code == code.ToString())
.FirstOrDefault();
}
StackOverflow-bezogene Fragen
- Warum erkennt LINQ to Entities die Methode 'System.String ToString () nicht?
- LINQ to Entities erkennt die Methode 'System.String-Format (System.String, System.Object, System.Object)' nicht
- LINQ to Entities erkennt die Methode 'System.String ToString ()' nicht. Diese Methode kann nicht in einen Speicherausdruck übersetzt werden
Lösung
Für dieses spezielle Problem gibt es unterschiedliche Lösungen.
Verschieben Sie ToString () in eine separate Zeile.
using (var context = new CustomerContext())
{
string codeStr = code.ToString();
var item = context.InvoiceItems
.Where(i => i.Code == codeStr)
.FirstOrDefault();
}
EF-Erweiterungsmethode verwenden,
using (var context = new CustomerContext())
{
var item = context.InvoiceItems
.Where(i => i.Code == SqlFunctions.StringConvert(code))
.FirstOrDefault();
}
Konvertieren Sie das IQueryable-Ergebnis vor dem Filtern in IEnumerable
using (var context = new CustomerContext())
{
var item = context.InvoiceItems.AsEnumerable()
.Where(i => i.Code == code.ToString())
.FirstOrDefault();
}