Maison > développement back-end > C++ > Comment résoudre l'erreur « LINQ to Entities ne reconnaît pas la méthode 'Double.Parse' » ?

Comment résoudre l'erreur « LINQ to Entities ne reconnaît pas la méthode 'Double.Parse' » ?

Linda Hamilton
Libérer: 2024-12-28 22:10:11
original
231 Les gens l'ont consulté

How to Resolve the

Explication de l'erreur : "LINQ to Entities ne reconnaît pas la méthode 'Double Parse(System.String)' et cette méthode ne peut pas être traduite en une expression de magasin"

Cette erreur se produit lors de la tentative d'exécution d'une expression LINQ contenant une méthode qui n'est pas prise en charge par le moteur de base de données pour Entity Framework. Dans ce cas, la méthode à l'origine de l'erreur est Double.Parse(string).

Détails du problème

Dans le code fourni, l'erreur est rencontrée dans l'instruction suivante :

model.Referring = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question1) ? 0 : Double.Parse(m.Question1)).Average());
Copier après la connexion

Entity Framework traduit les expressions LINQ en requêtes SQL à exécuter sur la base de données. Cependant, la méthode Double.Parse n'est pas une fonction SQL standard et ne peut pas être directement convertie en SQL.

Définition de fonction personnalisée

Pour résoudre ce problème, vous pouvez définir une fonction personnalisée dans votre entité Modèle de framework pouvant être traduit en expression SQL équivalente. Dans ce cas, nous définirons une fonction appelée ParseDouble.

Définition Entité-SQL dans le fichier EDMX

Ouvrez le fichier *.edmx de votre modèle et localisez le élément. Ajoutez la définition de fonction suivante dans le fichier element :

    <Function Name="ParseDouble" ReturnType="Edm.Double">
        <Parameter Name="stringvalue" Type="Edm.String" />
        <DefiningExpression>
            cast(stringvalue as Edm.Double)
        </DefiningExpression>
    </Function>
Copier après la connexion

Méthode personnalisée dans la classe ObjectContext

Ensuite, créez une classe partielle pour votre classe ObjectContext et ajoutez-y la méthode suivante :

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);
    }
}
Copier après la connexion

Mise à jour Expression LINQ

Une fois que vous avez défini et implémenté la fonction personnalisée, vous pouvez mettre à jour votre expression LINQ pour l'utiliser it :

model.Referring = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question1) ? 0 : YourObjectContext.ParseDouble(m.Question1)).Average());
Copier après la connexion

Maintenant, l'expression LINQ devrait être traduite avec succès en une requête SQL pouvant être exécutée par le moteur de base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal