Share via


Gewusst wie: Aufrufen von im Modell definierten Funktionen in Abfragen (LINQ to Entities)

In diesem Thema wird beschrieben, wie Funktionen, die im konzeptionellen Modell definiert sind, aus LINQ to Entities -Abfragen heraus aufgerufen werden.

Das nachfolgende Verfahren bietet einen allgemeinen Überblick über den Aufruf einer im Modell definierten Funktion aus einer LINQ to Entities -Abfrage heraus. Das folgende Beispiel enthält weitere Details zu den Schritten in der Prozedur. In dem Verfahren wird davon ausgegangen, dass eine Funktion im konzeptionellen Modell definiert wurde. Weitere Informationen finden Sie unter How to: Define Custom Functions in the Conceptual Model.

So rufen Sie eine im konzeptionellen Modell definierte Funktion auf

  1. Fügen Sie der Anwendung, die der im konzeptionellen Modell definierten Funktion zugeordnet ist, eine Common Language Runtime (CLR)-Methode hinzu. Zum Zuordnen der Methode müssen Sie ein EdmFunctionAttribute für die Methode übernehmen. Beachten Sie, dass der NamespaceName-Parameter und der FunctionName-Parameter des Attributs den Namespacenamen bzw. den Funktionsnamen im konzeptionellen Modell darstellen. Bei der Funktionsnamenauflösung für LINQ wird die Groß-/Kleinschreibung berücksichtigt.

  2. Rufen Sie die Funktion in einer LINQ to Entities -Abfrage auf.

Beispiel

Im folgenden Beispiel wird veranschaulicht, wie eine Funktion, die im konzeptionellen Modell definiert wird, aus einer LINQ to Entities -Abfrage heraus aufgerufen wird. Im Beispiel wird das Modell "School" verwendet. Weitere Informationen zum Modell "School" finden Sie unter Erstellen der Beispieldatenbank "School" (Entity Framework-Schnellstart) und Erstellen der EDMX-Datei für das Modell 'School' (Entity Framework-Schnellstart).

Die folgende konzeptionelle Modellfunktion gibt die Anzahl der Jahre zurück, die seit der Einstellung einer Lehrkraft vergangen sind. Informationen zum Hinzufügen der Funktion zu einem konzeptionellen Modell finden Sie unter How to: Define Custom Functions in the Conceptual Model.

<Function Name="YearsSince" ReturnType="Edm.Int32">
  <Parameter Name="date" Type="Edm.DateTime" />
  <DefiningExpression>
    Year(CurrentDateTime()) - Year(date)
  </DefiningExpression>
</Function>

Fügen Sie der Anwendung danach die folgende Methode hinzu, und verwenden Sie ein EdmFunctionAttribute, um sie der Funktion im konzeptionellen Modell zuzuordnen:

<EdmFunction("SchoolModel", "YearsSince")>
Public Function YearsSince(ByVal date1 As DateTime) _
    As Integer
    Throw New NotSupportedException("Direct calls are not supported.")
End Function
[EdmFunction("SchoolModel", "YearsSince")]
public static int YearsSince(DateTime date)
{
    throw new NotSupportedException("Direct calls are not supported.");
}

Jetzt können Sie die im konzeptionellen Modell definierte Funktion aus einer LINQ to Entities -Abfrage heraus aufrufen. Im folgenden Code wird die Methode aufgerufen, um alle Lehrkräfte anzuzeigen, die vor mehr als zehn Jahren eingestellt wurden:

Using context As New SchoolEntities()
    ' Retrieve instructors hired more than 10 years ago.
    Dim instructors = From p In context.People _
        Where YearsSince(CType(p.HireDate, DateTime?)) > 10 _
        Select p

    For Each instructor In instructors
        Console.WriteLine(instructor.LastName)
    Next
End Using
using (SchoolEntities context = new SchoolEntities())
{
    // Retrieve instructors hired more than 10 years ago.
    var instructors = from p in context.People
                      where YearsSince((DateTime)p.HireDate) > 10
                      select p;

    foreach (var instructor in instructors)
    {
        Console.WriteLine(instructor.LastName);
    }
}

Siehe auch

Aufgaben

Gewusst wie: Aufrufen von modelldefinierten Funktionen als Objektmethoden (LINQ to Entities)

Konzepte

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

Weitere Ressourcen

.edmx File Overview