Udostępnij przez


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

Zobacz też