Udostępnij przez


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

Zobacz też