Maison > développement back-end > C++ > Comment intégrer des fonctions SQL personnalisées avec LINQ to Entities ?

Comment intégrer des fonctions SQL personnalisées avec LINQ to Entities ?

Barbara Streisand
Libérer: 2024-12-30 18:33:13
original
741 Les gens l'ont consulté

How to Integrate Custom SQL Functions with LINQ to Entities?

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 balise dans le fichier EDMX, définissez un élément Function représentant votre fonction personnalisée. Cet élément définit le code Entity-SQL traduit, tel que :

<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

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

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

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

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!

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