Partager via


Comment : appeler des fonctions de chaînes canoniques

La classe EntityFunctions contient des méthodes qui exposent les fonctions canoniques à utiliser dans les requêtes LINQ to Entities. Pour plus d’informations sur les fonctions canoniques, consultez Fonctions canoniques.

Notes

Les méthodes AsUnicode et AsNonUnicode dans la classe EntityFunctions n'ont pas d'équivalents de fonction canonique.

Les fonctions canoniques qui effectuent un calcul sur un ensemble de valeurs et retournent une valeur unique (également appelées fonctions canoniques d'agrégation) peuvent être appelées directement. Les autres fonctions canoniques peuvent être appelées uniquement dans le cadre d'une requête LINQ to Entities. Pour appeler directement une fonction d'agrégation, vous devez passer un objet ObjectQuery<T> à la fonction. Pour plus d'informations, consultez le second exemple ci-dessous.

Vous pouvez appeler certaines fonctions canoniques en utilisant des méthodes CLR (Common Language Runtime) dans les requêtes LINQ to Entities. Pour obtenir la liste des méthodes CLR qui sont mappées aux fonctions canoniques, consultez Mappage de la méthode CLR aux fonctions de chaînes canoniques.

Exemple 1

L’exemple suivant utilise le modèle de vente AdventureWorks Sales Model. L'exemple exécute une requête LINQ to Entities qui utilise la méthode DiffDays pour retourner tous les produits pour lesquels la différence entre SellEndDate et SellStartDate est inférieure à 365 jours :

using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    var products = from p in AWEntities.Products
                   where EntityFunctions.DiffDays(p.SellEndDate, p.SellStartDate) < 365
                   select p;
    foreach (var product in products)
    {
        Console.WriteLine(product.ProductID);
    }
}
Using AWEntities As New AdventureWorksEntities()
    Dim products = From p In AWEntities.Products _
                   Where EntityFunctions.DiffDays(p.SellEndDate, p.SellStartDate) < 365 _
                   Select p

    For Each product In products
        Console.WriteLine(product.ProductID)
    Next
End Using

Exemple 2

L’exemple suivant utilise le modèle de vente AdventureWorks Sales Model. L'exemple appelle directement la méthode StandardDeviation d'agrégation pour retourner l'écart type des sous-totaux SalesOrderHeader. Notez qu'un ObjectQuery<T> est passé à la fonction, ce qui lui permet d'être appelée même si elle ne figure pas dans une requête LINQ to Entities.

using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    double? stdDev = EntityFunctions.StandardDeviation(
        from o in AWEntities.SalesOrderHeaders
        select o.SubTotal);

    Console.WriteLine(stdDev);
}
Using AWEntities As New AdventureWorksEntities()
    Dim stdDev As Double? = EntityFunctions.StandardDeviation( _
        From o In AWEntities.SalesOrderHeaders _
        Select o.SubTotal)

    Console.WriteLine(stdDev)
End Using

Voir aussi