Fehlerbehebung für den Fehler „ToString()-Methode nicht erkannt“ in LINQ to Entities
Beim Arbeiten mit LINQ to Entities kann der Fehler „LINQ to Entities erkennt die Methode ‚System.String ToString()‘“ nicht auftreten.“ Dies liegt daran, dass LINQ to Entities Schwierigkeiten hat, die ToString()
-Methode in eine datenbankkompatible Abfrage zu übersetzen. Die Lösung besteht darin, die direkte Verwendung von ToString()
innerhalb der LINQ-Abfrage zu vermeiden.
Hier ist ein überarbeitetes Codebeispiel, das dieses Problem behebt:
<code class="language-csharp">using (var context = new Context()) { // ... foreach (var item in collection) { string strItem = item.Key.ToString(); // Assign ToString() result to a variable IQueryable<entity> pages = from p in context.pages where p.Serial == strItem select p; foreach (var page in pages) { DataManager.AddPageToDocument(page, item.Value); } } Console.WriteLine("Done!"); Console.Read(); }</code>
Indem wir das Ergebnis von item.Key.ToString()
der Variablen strItem
vorab zuweisen, umgehen wir das Übersetzungsproblem. Die where
-Klausel verwendet jetzt ein Zeichenfolgenliteral, das der LINQ to Entities-Anbieter effektiv verarbeiten kann.
Alternativer Ansatz: Nutzung von SqlFunctions
Entity Framework bietet die Hilfsklasse SqlFunctions
, die datenbankspezifische Funktionen bereitstellt. Dies bietet für solche Fälle eine elegantere Lösung. Die SqlFunctions.StringConvert
-Methode ermöglicht die Konvertierung innerhalb der Datenbankabfrage selbst.
So implementieren Sie diese Lösung:
<code class="language-csharp">using (var context = new Context()) { // ... foreach (var item in collection) { IQueryable<entity> pages = from p in context.pages where SqlFunctions.StringConvert((double?)p.Serial) == item.Key.ToString() //Note the cast to (double?) if needed select p; foreach (var page in pages) { DataManager.AddPageToDocument(page, item.Value); } } Console.WriteLine("Done!"); Console.Read(); }</code>
Dieser Ansatz behält die String-Konvertierung innerhalb der Datenbankabfrage bei, verbessert die Effizienz und vermeidet Übersetzungsfehler. Beachten Sie, dass SqlFunctions.StringConvert
häufig eine Umwandlung des Datenbankfelds in einen geeigneten Typ erfordert (z. B. (double?)p.Serial
, wenn p.Serial
ein numerischer Typ ist). Passen Sie die Umwandlung nach Bedarf an Ihr Datenbankschema an. Diese Methode wird im Allgemeinen für eine bessere Leistung und saubereren Code bevorzugt.
Das obige ist der detaillierte Inhalt vonWie löse ich die Ausnahme „LINQ to Entities erkennt die Methode ‚System.String ToString()' nicht'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!