Share via


Gewusst wie: Aufrufen von Datenbankfunktionen (LINQ to Entities)

Die SqlFunctions-Klasse enthält Methoden, mit denen SQL Server-Funktionen in LINQ to Entities-Abfragen verwendet werden können. Beim Verwenden von SqlFunctions-Methoden in LINQ to Entities-Abfragen werden die entsprechenden Datenbankfunktionen in der Datenbank ausgeführt.

Dd456858.note(de-de,VS.100).gifHinweis:
Datenbankfunktionen, die eine Berechnung für einen Satz von Werten ausführen und einen einzelnen Wert (auch bekannt als aggregierte Datenbankfunktionen) zurückgeben, können direkt aufgerufen werden.Andere kanonische Funktionen können nur als Teil einer LINQ to Entities-Abfrage aufgerufen werden.Zum direkten Aufrufen einer Aggregatfunktion muss eine ObjectQuery an die Funktion übergeben werden.Weitere Informationen finden Sie unten im zweiten Beispiel.

Dd456858.note(de-de,VS.100).gifHinweis:
Die Methoden in der SqlFunctions-Klasse sind spezifisch für SQL Server-Funktionen.Ähnliche Klassen, die Datenbankfunktionen verfügbar machen, sind möglicherweise über andere Anbieter verfügbar.

Beispiel

Im folgenden Beispiel wird das AdventureWorks Sales-Modell verwendet. Im Beispiel wird eine LINQ to Entities-Abfrage ausgeführt, die die CharIndex-Methode zur Rückgabe aller Kontakte verwendet, deren Nachname mit "Si" beginnt:

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
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);
    }
}

Im folgenden Beispiel wird das AdventureWorks Sales-Modell verwendet. Im Beispiel wird die aggregierte ChecksumAggregate-Methode direkt aufgerufen. Eine ObjectQuery wird an die Funktion übergeben, durch die sie ohne Teil einer LINQ to Entities-Abfrage sein zu müssen, aufgerufen werden kann.

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
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);
}

Siehe auch

Konzepte

Aufrufen von Funktionen in LINQ to Entities-Abfragen
Abfragen in LINQ to Entities