Share via


Postupy: Volání databázových funkcí

Třída SqlFunctions obsahuje metody, které zpřístupňují funkce SQL Serveru pro použití v LINQ to Entities dotazy. Při použití SqlFunctions metod v LINQ to Entities dotazy, odpovídající databázové funkce se spustí v databázi.

Poznámka:

Databázové funkce, které provádějí výpočet pro sadu hodnot a vracejí jednu hodnotu (označovanou také jako agregační databázové funkce), je možné přímo vyvolat. Jiné kanonické funkce lze volat pouze jako součást dotazu LINQ to Entities. Pokud chcete volat agregační funkci přímo, musíte funkci předat ObjectQuery<T> . Další informace najdete v druhém příkladu níže.

Poznámka:

Metody ve SqlFunctions třídě jsou specifické pro funkce SQL Serveru. Podobné třídy, které zpřístupňují databázové funkce, mohou být dostupné prostřednictvím jiných poskytovatelů.

Příklad 1

Následující příklad používá model AdventureWorks Sales Model. Příklad spustí dotaz LINQ to Entities, který pomocí CharIndex metody vrátí všechny kontakty, jejichž příjmení začíná na "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

Příklad 2

Následující příklad používá model AdventureWorks Sales Model. Příklad volá agregační ChecksumAggregate metodu přímo. Všimněte si, že ObjectQuery<T> funkce je předána funkci, která umožňuje volat, aniž by byla součástí dotazu 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

Viz také