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