Freigeben über


CLR-Methodenaufrufe und Funktionszuordnung

Das Entity Framework stellt einen Satz kanonischer Funktionen bereit, die eine auf vielen Datenbanksystemen verbreitete Funktionalität implementieren, z. B. Zeichenfolgenbearbeitung und mathematische Funktionen. Dadurch können Entwickler für einen großen Bereich von Datenbanksystemen entwickeln. Beim Aufrufen aus einer Abfragetechnologie wie LINQ to Entities werden diese kanonischen Funktionen in die entsprechenden Speicherfunktionen des verwendeten Anbieters übersetzt. Dadurch können Funktionsaufrufe für verschiedene Datenquellen in einer allgemeinen Form ausgedrückt werden, und es werden konsistente datenquellenübergreifende Abfragemöglichkeiten bereitgestellt. Die bitweisen Operatoren AND, OR, NOT und XOR werden auch dann kanonischen Funktionen zugeordnet, wenn der Operand ein numerischer Typ ist. Bei booleschen Operanden werden durch die bitweisen Operatoren AND, OR, NOT und XOR die logischen Operationen AND, OR, NOT und XOR ihrer Operanden berechnet. Weitere Informationen finden Sie unter Kanonische Funktionen (Entity SQL).

In LINQ-Szenarios müssen bei Abfragen für das Entity Framework bestimmte CLR-Methoden den Methoden für die zugrunde liegende Datenquelle mithilfe kanonischer Funktionen zugeordnet werden. Bei allen Methodenaufrufen in einer LINQ to Entities-Abfrage, die nicht explizit einer kanonischen Funktion zugeordnet sind, wird eine NotSupportedException-Laufzeitausnahme ausgelöst. Eine Liste der CLR-Methoden, die kanonischen Funktionen zugeordnet sind, finden Sie unter Mapping von CLR-Methoden zu kanonischen Funktionen.

Im folgenden Beispiel werden Adressen im Algiers Drive abgefragt. Der Contains-Methodenaufruf in der Abfrage wird der kanonischen Funktion IndexOf zugeordnet.

Using AWEntities As New AdventureWorksEntities()
    Dim addresses As ObjectQuery(Of Address) = AWEntities.Address

    Dim query = _
    From address In addresses _
    Where address.AddressLine1.Contains("Algiers Dr.") _
    Select address

    For Each algiersAddress As Address In query
        Console.WriteLine("Address 1: " + algiersAddress.AddressLine1)
    Next

End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    ObjectQuery<Address> addresses = AWEntities.Address;

    IQueryable<Address> query = from address in addresses
                                where address.AddressLine1.Contains("Algiers Dr.")
                                select address;

    // Addresses on Algiers Dr.
    foreach (Address algiersAddress in query)
    {
        Console.WriteLine("Address 1: " + algiersAddress.AddressLine1);
    }
}

Siehe auch

Konzepte

Kanonische Funktionen (Entity SQL)

Weitere Ressourcen

Abfragen mit LINQ to Entities