Instrukcje: Wywoływanie funkcji kanonicznych
Klasa EntityFunctions zawiera metody, które uwidaczniają funkcje kanoniczne do użycia w zapytaniach LINQ to Entities. Aby uzyskać informacje na temat funkcji kanonicznych, zobacz Canonical Functions.
Uwaga
Metody AsUnicode i AsNonUnicode w EntityFunctions klasie nie mają odpowiedników funkcji kanonicznych.
Funkcje kanoniczne, które wykonują obliczenia na zestawie wartości i zwracają pojedynczą wartość (znaną również jako funkcje kanoniczne agregacji), mogą być wywoływane bezpośrednio. Inne funkcje kanoniczne mogą być wywoływane tylko jako część zapytania LINQ to Entities. Aby bezpośrednio wywołać funkcję agregacji, należy przekazać element ObjectQuery<T> do funkcji. Aby uzyskać więcej informacji, zobacz drugi przykład poniżej.
Niektóre funkcje kanoniczne można wywołać przy użyciu metod środowiska uruchomieniowego języka wspólnego (CLR) w zapytaniach LINQ to Entities. Aby uzyskać listę metod CLR mapujących na funkcje kanoniczne, zobacz CLR Method to Canonical Function Mapping (Metoda CLR do mapowania funkcji kanonicznych).
Przykład 1
W poniższym przykładzie użyto modelu AdventureWorks Sales Model. W przykładzie jest wykonywane zapytanie LINQ to Entities, które używa DiffDays metody , aby zwrócić wszystkie produkty, dla których różnica między elementami SellEndDate
i SellStartDate
jest mniejsza niż 365 dni:
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
var products = from p in AWEntities.Products
where EntityFunctions.DiffDays(p.SellEndDate, p.SellStartDate) < 365
select p;
foreach (var product in products)
{
Console.WriteLine(product.ProductID);
}
}
Using AWEntities As New AdventureWorksEntities()
Dim products = From p In AWEntities.Products _
Where EntityFunctions.DiffDays(p.SellEndDate, p.SellStartDate) < 365 _
Select p
For Each product In products
Console.WriteLine(product.ProductID)
Next
End Using
Przykład 2
W poniższym przykładzie użyto modelu AdventureWorks Sales Model. W przykładzie metoda agregująca StandardDeviation jest wywoływana bezpośrednio w celu zwrócenia odchylenia standardowego SalesOrderHeader
sum częściowych. Należy pamiętać, że element ObjectQuery<T> jest przekazywany do funkcji, która umożliwia jej wywoływanie bez bycia częścią zapytania LINQ to Entities.
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
double? stdDev = EntityFunctions.StandardDeviation(
from o in AWEntities.SalesOrderHeaders
select o.SubTotal);
Console.WriteLine(stdDev);
}
Using AWEntities As New AdventureWorksEntities()
Dim stdDev As Double? = EntityFunctions.StandardDeviation( _
From o In AWEntities.SalesOrderHeaders _
Select o.SubTotal)
Console.WriteLine(stdDev)
End Using