Delen via


Procedure: Databasefuncties aanroepen

De SqlFunctions klasse bevat methoden die SQL Server-functies beschikbaar maken voor gebruik in LINQ voor entiteiten-query's. Wanneer u SqlFunctions methoden in LINQ gebruikt voor entiteitenquery's, worden de bijbehorende databasefuncties uitgevoerd in de database.

Notitie

Databasefuncties die een berekening uitvoeren op een set waarden en één waarde retourneren (ook wel statistische databasefuncties genoemd) kunnen rechtstreeks worden aangeroepen. Andere canonieke functies kunnen alleen worden aangeroepen als onderdeel van een LINQ naar entiteiten-query. Als u een statistische functie rechtstreeks wilt aanroepen, moet u een ObjectQuery<T> functie doorgeven aan de functie. Zie het tweede voorbeeld hieronder voor meer informatie.

Notitie

De methoden in de SqlFunctions klasse zijn specifiek voor SQL Server-functies. Vergelijkbare klassen die databasefuncties beschikbaar maken, zijn mogelijk beschikbaar via andere providers.

Voorbeeld 1

In het volgende voorbeeld wordt het AdventureWorks Sales Model gebruikt. In het voorbeeld wordt een LINQ uitgevoerd op entiteitenquery die gebruikmaakt van de methode om alle contactpersonen te retourneren waarvan de CharIndex achternaam begint met '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

Voorbeeld 2

In het volgende voorbeeld wordt het AdventureWorks Sales Model gebruikt. In het voorbeeld wordt de statistische ChecksumAggregate methode rechtstreeks aangeroepen. Houd er rekening mee dat een ObjectQuery<T> functie wordt doorgegeven aan de functie, zodat deze kan worden aangeroepen zonder deel uit te maken van een LINQ naar entiteitenquery.

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

Zie ook