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).
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());
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.
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.
Ouvrez le fichier *.edmx de votre modèle et localisez le
<Function Name="ParseDouble" ReturnType="Edm.Double"> <Parameter Name="stringvalue" Type="Edm.String" /> <DefiningExpression> cast(stringvalue as Edm.Double) </DefiningExpression> </Function>
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); } }
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());
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!