Megosztás a következőn keresztül:


Útmutató: Modell által definiált függvények meghívása lekérdezésekben

Ez a témakör azt ismerteti, hogyan hívhatja meg a fogalmi modellben definiált függvényeket a LINQ-n belülről az Entitások lekérdezésekre.

Az alábbi eljárás egy magas szintű vázlatot nyújt egy modell által definiált függvény meghívásához a LINQ-ból az Entitások lekérdezésbe. Az alábbi példa részletesebben ismerteti az eljárás lépéseit. Az eljárás feltételezi, hogy definiált egy függvényt a fogalmi modellben. További információ : How to: Define Custom Functions in the Conceptual Model.

A fogalmi modellben definiált függvény meghívása

  1. Adjon hozzá egy közös nyelvi futtatókörnyezeti (CLR) metódust az alkalmazáshoz, amely megfelel a fogalmi modellben definiált függvénynek. A metódus leképezéséhez alkalmaznia kell egy EdmFunctionAttribute metódust. Vegye figyelembe, hogy az NamespaceName attribútum és FunctionName paraméterei a fogalmi modell névtérneve, a függvény neve pedig a fogalmi modellben. A LINQ függvénynévfeloldás megkülönbözteti a kis- és nagybetűk nevét.

  2. A LINQ függvény meghívása Entitások lekérdezésre.

1. példa

Az alábbi példa bemutatja, hogyan hívhat meg egy, a fogalmi modellben definiált függvényt a LINQ-ból az Entitások lekérdezésbe. A példa az Iskola modellt használja. Az iskolai modellről további információt az Iskolai mintaadatbázis létrehozása és az Iskola .edmx fájl létrehozása című témakörben talál.

Az alábbi fogalmi modellfüggvény az oktató alkalmazása óta eltelt évek számát adja vissza. A függvény fogalmi modellhez való hozzáadásáról további információt a How to: Define Custom Functions in the Conceptual Model (Egyéni függvények definiálása a fogalmi modellben) című témakörben talál.

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

2. példa

Ezután adja hozzá a következő metódust az alkalmazáshoz, és használjon egy módszert EdmFunctionAttribute a fogalmi modellfüggvényhez való leképezéséhez:

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

3. példa

Most már meghívhatja a koncepcionális modellfüggvényt a LINQ-ból az Entitások lekérdezésbe. A következő kód meghívja a metódust, hogy megjelenítse a több mint tíz évvel ezelőtt felvett összes oktatót:

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

Lásd még