Ich habe folgenden Ausdruck linq. Ich möchte die Summe numerischer Werte im Nvarchar-Feld berechnen. Ich verwende folgenden Code, um dies zu tun. Aber ich bekomme einen Fehler, wenn ich versuche, das auszuführen.
%Vor% Fehlerbeschreibung:
LINQ to Entities erkennt die Methode 'Int32 nicht Parse (System.String) 'Methode, und diese Methode kann nicht übersetzt werden in einen Geschäftsausdruck
Wie kann ich dieses Problem lösen und diesen Code besser schreiben?
Ich ändere den Code zu diesem
%Vor%, aber erhalte diesen Fehler
EF 5:
Anstelle von int.Pasrse
verwenden Convert.ToInt32
. Entity Framework generiert korrekte CAST
-Funktionen in SQL.
EF 6:
Kurze Antwort:
%Vor%Lange Antwort:
In EF 6 müssen Sie einen numerischen Wert in einen String konvertieren mit SqlFunctions.StringConvert . aber es hat ein Problem. Es fügt dem Ergebnis unnötige Leerzeichen hinzu. Der Vergleich wird also fehlschlagen. Deshalb habe ich Trim()
dort hingelegt. Ich habe es mit EF 6.1.1 getestet.
Entity Framework kann diesen Konvertierungstyp nicht in SQL übersetzen.
Besteht die Möglichkeit, dass Sie Ihre Datenstruktur ändern können, um geeignete Datentypen zu verwenden, z. B. die tatsächlichen DateTime
-Typen? Bei großen Datenmengen beeinträchtigen solche Konvertierungen die Leistung.
Ich würde empfehlen, entweder Ihre Datenmodelltypen zu ändern, um diese Konvertierungen zu vermeiden, oder , wenn die Datenmenge immer klein ist , dann zuerst die Daten zu erhalten und später Linq zu Objects.
Ersetze alle deine int.Parse
durch SqlFunctions.StringConvert(variable)
. Es gibt keine Funktion zum Konvertieren von String in Int. Sie sollten versuchen, die Umkehrung zu machen und Ihr Int in String mit StringConvert zu konvertieren.
Die SqlFunctions-Dienstprogramme können den Befehl im SQL-Befehl übersetzen.
In Ihrer where-Klausel können Sie int.Parse
nicht aufrufen. Entity Framework weiß nicht, wie das in SQL konvertiert wird. Überlegen Sie, Ihre Where
zu überarbeiten.
Wenn Sie sicherstellen müssen, dass eine CLR-Methode in LINQ to Entities verwendet werden kann, sollten Sie diese Quelle konsultieren: Ссылка .
Nicht ein schnelles Lesen, es braucht Zeit, aber hier ist die Antwort auf Ihre Frage (und viele mehr mögen es).
Es gibt eine schlecht gebaute Datenbank, die ich nicht bearbeiten kann, sondern benutzen muss.
Ich benutze das in Linq-To-Sql und es funktioniert.
Wirf die Zeichenkette zuerst auf das Objekt und dann auf int.
%Vor%Tags und Links c# entity-framework linq