LINQ to Entities-Fehler: ToString()
Methode nicht unterstützt
Das Migrieren von Daten zwischen Datenbanken wie MySQL und SQL Server kann manchmal diesen LINQ to Entities-Fehler auslösen:
„LINQ to Entities erkennt die Methode ‚System.String ToString()‘ nicht und diese Methode kann nicht in einen Speicherausdruck übersetzt werden.“
Dies geschieht, wenn Sie versuchen, eine Zeichenfolge mit einem Datenbankfeld mithilfe der ToString()
-Methode innerhalb einer LINQ-Abfrage zu vergleichen. Das Problem besteht darin, dass ToString()
keine Standard-SQL-Funktion ist und LINQ to Entities sie nicht in entsprechenden SQL-Code übersetzen kann.
Lösung: Verwendung einer temporären Variablen
Die einfachste Lösung besteht darin, das Zeichenfolgenergebnis von ToString()
in einer Variablen zu speichern, bevor es in Ihrer LINQ-Abfrage verwendet wird:
var strItem = item.Key.ToString(); IQueryable<entity> pages = from p in context.pages where p.Serial == strItem select p;
Dadurch wird die direkte Verwendung von ToString()
innerhalb des LINQ-Ausdrucks vermieden und das Übersetzungsproblem gelöst.
Alternative: Beschäftigung SqlFunctions
In bestimmten Szenarien bietet die Hilfsklasse SqlFunctions
eine Alternative. Es bietet datenbankspezifische Funktionen, die LINQ to Entities übersetzen kann:
IQueryable<entity> pages = from p in context.pages where p.Serial == SqlFunctions.StringConvert(item.Key) select p;
SqlFunctions.StringConvert()
führt eine ähnliche Konvertierung wie ToString()
durch, jedoch auf eine Weise, die mit dem SQL-Dialekt der Datenbank kompatibel ist.
Erklärung:
Das Kernproblem liegt darin, wie LINQ to Entities Ausdrücke verarbeitet. Es führt ToString()
nicht direkt aus; Stattdessen wird versucht, den gesamten Ausdruck in SQL zu übersetzen. Da es für ToString()
kein direktes SQL-Äquivalent gibt, schlägt die Übersetzung fehl und führt zu der Ausnahme. Die oben genannten Lösungen umgehen dies, indem sie entweder die Zeichenfolge vorverarbeiten oder eine datenbankkompatible Funktion verwenden.
Das obige ist der detaillierte Inhalt vonWarum löst LINQ to Entities die Ausnahme „Method ‚System.String ToString()' Not Recognized' aus und wie kann ich das beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!