Partager via


Comment : appeler des fonctions de base de données

La classe SqlFunctions contient des méthodes qui exposent les fonctions SQL Server à utiliser dans les requêtes LINQ to Entities. Lorsque vous utilisez des méthodes SqlFunctions dans les requêtes LINQ to Entities, les fonctions de base de données correspondantes sont exécutées dans la base de données.

Notes

Les fonctions de base de données qui effectuent un calcul sur un ensemble de valeurs et retournent une valeur unique (également appelées fonctions de base de données 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.

Notes

Les méthodes dans la classe SqlFunctions sont spécifiques aux fonctions SQL Server. Des classes semblables qui exposent des fonctions de base de données peuvent être disponibles via d'autres fournisseurs.

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 CharIndex pour retourner tous les contacts dont le nom commence par « Si » :

using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    // SqlFunctions.CharIndex is executed in the database.
    var contacts = from c in AWEntities.Contacts
                   where SqlFunctions.CharIndex("Si", c.LastName) == 1
                   select c;

    foreach (var contact in contacts)
    {
        Console.WriteLine(contact.LastName);
    }
}
Using AWEntities As New AdventureWorksEntities()

    ' SqlFunctions.CharIndex is executed in the database.
    Dim contacts = From c In AWEntities.Contacts _
                   Where SqlFunctions.CharIndex("Si", c.LastName) = 1 _
                   Select c

    For Each contact In contacts
        Console.WriteLine(contact.LastName)
    Next
End Using

Exemple 2

L’exemple suivant utilise le modèle de vente AdventureWorks Sales Model. L'exemple appelle directement la méthode d'agrégation ChecksumAggregate. 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())
{
    // SqlFunctions.ChecksumAggregate is executed in the database.
    decimal? checkSum = SqlFunctions.ChecksumAggregate(
        from o in AWEntities.SalesOrderHeaders
        select o.SalesOrderID);

    Console.WriteLine(checkSum);
}
Using AWEntities As New AdventureWorksEntities()

    ' SqlFunctions.ChecksumAggregate is executed in the database.
    Dim checkSum As Integer = SqlFunctions.ChecksumAggregate( _
        From o In AWEntities.SalesOrderHeaders _
        Select o.SalesOrderID)

    Console.WriteLine(checkSum)
End Using

Voir aussi