Instrukcje: Wywoływanie funkcji bazy danych
Klasa SqlFunctions zawiera metody uwidaczniające funkcje programu SQL Server do użycia w zapytaniach LINQ to Entities. Jeśli używasz SqlFunctions metod w zapytaniach LINQ to Entities, odpowiednie funkcje bazy danych są wykonywane w bazie danych.
Uwaga
Funkcje bazy danych, które wykonują obliczenia na zestawie wartości i zwracają pojedynczą wartość (znaną również jako funkcje agregującej bazy danych), mogą być wywoływane bezpośrednio. Inne funkcje kanoniczne mogą być wywoływane tylko jako część zapytania LINQ to Entities. Aby bezpośrednio wywołać funkcję agregacji, należy przekazać element ObjectQuery<T> do funkcji. Aby uzyskać więcej informacji, zobacz drugi przykład poniżej.
Uwaga
Metody w SqlFunctions klasie są specyficzne dla funkcji programu SQL Server. Podobne klasy, które uwidaczniają funkcje bazy danych, mogą być dostępne za pośrednictwem innych dostawców.
Przykład 1
W poniższym przykładzie użyto modelu AdventureWorks Sales Model. W przykładzie jest wykonywane zapytanie LINQ to Entities, które używa CharIndex metody , aby zwrócić wszystkie kontakty, których nazwisko zaczyna się od "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
Przykład 2
W poniższym przykładzie użyto modelu AdventureWorks Sales Model. W przykładzie metoda agregacji ChecksumAggregate jest wywoływana bezpośrednio. Należy pamiętać, że element ObjectQuery<T> jest przekazywany do funkcji, która umożliwia jej wywoływanie bez bycia częścią zapytania 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