Heim > Backend-Entwicklung > C++ > Wie behebe ich den Fehler „LINQ to Entities erkennt die Methode ‚Double.Parse' nicht'?

Wie behebe ich den Fehler „LINQ to Entities erkennt die Methode ‚Double.Parse' nicht'?

Linda Hamilton
Freigeben: 2024-12-28 22:10:11
Original
231 Leute haben es durchsucht

How to Resolve the

Fehlererklärung: „LINQ to Entities erkennt die Methode ‚Double Parse(System.String)‘ nicht und diese Methode kann nicht in einen Speicherausdruck übersetzt werden“

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).

Problemdetails

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());
Nach dem Login kopieren

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.

Benutzerdefinierte Funktionsdefinition

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.

Entity-SQL-Definition in EDMX-Datei

Öffnen Sie die *.edmx-Datei für Ihr Modell und suchen Sie das Element. Fügen Sie die folgende Funktionsdefinition innerhalb des hinzu. Element:

    <Function Name="ParseDouble" ReturnType="Edm.Double">
        <Parameter Name="stringvalue" Type="Edm.String" />
        <DefiningExpression>
            cast(stringvalue as Edm.Double)
        </DefiningExpression>
    </Function>
Nach dem Login kopieren

Benutzerdefinierte Methode in der ObjectContext-Klasse

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);
    }
}
Nach dem Login kopieren

Aktualisiert LINQ-Ausdruck

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());
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage