Procédure : appeler des fonctions canoniques (LINQ to Entities)
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 (Entity SQL).
Remarque : |
---|
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 à 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 méthodes CLR à des fonctions canoniques.
Exemple
L'exemple ci-dessous 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 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
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);
}
}
L'exemple ci-dessous 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 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 AWEntities As New AdventureWorksEntities()
Dim stdDev As Double? = EntityFunctions.StandardDeviation( _
From o In AWEntities.SalesOrderHeaders _
Select o.SubTotal)
Console.WriteLine(stdDev)
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
double? stdDev = EntityFunctions.StandardDeviation(
from o in AWEntities.SalesOrderHeaders
select o.SubTotal);
Console.WriteLine(stdDev);
}
Voir aussi
Concepts
Appel de fonctions dans les requêtes LINQ to Entities
Requêtes dans LINQ to Entities