Gör så här: Anropa databasfunktioner
Klassen SqlFunctions innehåller metoder som gör SQL Server-funktioner tillgängliga för användning i LINQ för entitetsfrågor. När du använder SqlFunctions metoder i LINQ till entitetsfrågor körs motsvarande databasfunktioner i databasen.
Kommentar
Databasfunktioner som utför en beräkning på en uppsättning värden och returnerar ett enda värde (kallas även aggregerade databasfunktioner) kan anropas direkt. Andra kanoniska funktioner kan bara anropas som en del av en LINQ-till-entitetsfråga. Om du vill anropa en aggregeringsfunktion direkt måste du skicka en ObjectQuery<T> till funktionen. Mer information finns i det andra exemplet nedan.
Kommentar
Metoderna i SqlFunctions klassen är specifika för SQL Server-funktioner. Liknande klasser som exponerar databasfunktioner kan vara tillgängliga via andra leverantörer.
Exempel 1
I följande exempel används AdventureWorks-försäljningsmodellen. Exemplet kör en LINQ till entitetsfråga som använder CharIndex metoden för att returnera alla kontakter vars efternamn börjar med "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
Exempel 2
I följande exempel används AdventureWorks-försäljningsmodellen. Exemplet anropar aggregeringsmetoden ChecksumAggregate direkt. Observera att en ObjectQuery<T> skickas till funktionen, vilket gör att den kan anropas utan att vara en del av en LINQ-till-entitetsfråga.
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