Partager via


Procédure : appeler des fonctions de base de données (LINQ to Entities)

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.

Dd456858.note(fr-fr,VS.100).gifRemarque :
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 à la fonction.Pour plus d'informations, consultez le second exemple ci-dessous.

Dd456858.note(fr-fr,VS.100).gifRemarque :
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

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

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
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);
    }
}

L'exemple ci-dessous utilise le Modèle de vente AdventureWorks Sales Model. L'exemple appelle directement la méthode d'agrégation ChecksumAggregate. 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()

    ' 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
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);
}

Voir aussi

Concepts

Appel de fonctions dans les requêtes LINQ to Entities
Requêtes dans LINQ to Entities