Ú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
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.
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