Dieser Fehler tritt auf, wenn versucht wird, einen LINQ-Ausdruck auszuführen, der eine Methode enthält, die von der Datenbank-Engine für Entity Framework nicht unterstützt wird. In diesem Fall ist die Methode, die den Fehler verursacht, Double.Parse(string).
Im bereitgestellten Code tritt der Fehler in der folgenden Anweisung auf:
model.Referring = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question1) ? 0 : Double.Parse(m.Question1)).Average());
Entity Framework übersetzt LINQ-Ausdrücke in SQL-Abfragen, um sie in der Datenbank auszuführen. Allerdings ist die Double.Parse-Methode keine Standard-SQL-Funktion und kann nicht direkt in SQL konvertiert werden.
Um dieses Problem zu beheben, können Sie eine benutzerdefinierte Funktion in Ihrer Entität definieren Framework-Modell, das in den entsprechenden SQL-Ausdruck übersetzt werden kann. In diesem Fall definieren wir eine Funktion namens ParseDouble.
Öffnen Sie die *.edmx-Datei für Ihr Modell und suchen Sie das
<Function Name="ParseDouble" ReturnType="Edm.Double"> <Parameter Name="stringvalue" Type="Edm.String" /> <DefiningExpression> cast(stringvalue as Edm.Double) </DefiningExpression> </Function>
Als nächstes erstellen Sie eine Teilklasse für Ihre ObjectContext-Klasse und fügen Sie ihr die folgende Methode hinzu:
using System.Data.Objects.DataClasses; public partial class YourObjectContext { /// <summary> /// This method exists for use in LINQ queries, /// as a stub that will be converted to a SQL CAST statement. /// </summary> [EdmFunction("YourModel", "ParseDouble")] public static double ParseDouble(string stringvalue) { return Double.Parse(stringvalue); } }
Sobald Sie die benutzerdefinierte Funktion definiert und implementiert haben, können Sie Ihren zu verwendenden LINQ-Ausdruck aktualisieren it:
model.Referring = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question1) ? 0 : YourObjectContext.ParseDouble(m.Question1)).Average());
Jetzt sollte der LINQ-Ausdruck erfolgreich in eine SQL-Abfrage übersetzt werden, die von der Datenbank-Engine ausgeführt werden kann.
Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „LINQ to Entities erkennt die Methode ‚Double.Parse' nicht'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!