LINQ to Entities et fonctions SQL personnalisées
LINQ to Entities permet aux développeurs d'interroger des données à l'aide d'une syntaxe familière qui ressemble beaucoup à SQL. Toutefois, certaines opérations peuvent nécessiter des fonctions personnalisées qui ne peuvent pas être directement traduites en SQL. Dans de tels cas, les développeurs doivent définir une fonction personnalisée dans le fichier Entity Data Model (EDMX) et implémenter une méthode de correspondance dans le code.
Définition d'une fonction personnalisée dans EDMX
Dans le cadre
<Function Name="ParseDouble" ReturnType="Edm.Double"> <Parameter Name="stringvalue" Type="Edm.String" /> <DefiningExpression> cast(stringvalue as Edm.Double) </DefiningExpression> </Function>
Implémentation de la fonction personnalisée dans le code
Dans la classe partielle générée à partir du fichier EDMX, implémenter une méthode qui correspond à la fonction personnalisée définie dans l'EDMX :
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); } }
Application de la fonction personnalisée dans LINQ
Dans votre instruction LINQ, remplacez l'appel de fonction correspondant par la méthode implémentée :
model.Referring = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question1) ? 0 : YourObjectContext.ParseDouble(m.Question1)).Average());
Fonction ronde personnalisée
Si l'instruction LINQ inclut également un appel à Math.Round, définissez une fonction personnalisée dans le fichier EDMX :
<Function Name="Round" ReturnType="Edm.Double"> <Parameter Name="input" Type="Edm.Double" /> <DefiningExpression> Round(input) </DefiningExpression> </Function>
Considérations supplémentaires
Il est important de consulter la liste des fonctions canoniques EDM pour s'assurer que la fonction souhaitée peut être traduite en SQL. Si une fonction ne peut pas être traduite, une approche différente, telle que l'implémentation d'une procédure stockée, peut être nécessaire.
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!