Share via


Postupy: Volání kanonických funkcí

Třída EntityFunctions obsahuje metody, které zpřístupňují kanonické funkce pro použití v LINQ to Entities dotazy. Informace o kanonických funkcích naleznete v tématu Canonical Functions.

Poznámka:

AsNonUnicode Metody AsUnicode ve EntityFunctions třídě nemají kanonické ekvivalenty funkce.

Kanonické funkce, které provádějí výpočet sady hodnot a vracejí jednu hodnotu (označovanou také jako agregační kanonické funkce), lze přímo vyvolat. Jiné kanonické funkce lze volat pouze jako součást dotazu LINQ to Entities. Pokud chcete volat agregační funkci přímo, musíte funkci předat ObjectQuery<T> . Další informace najdete v druhém příkladu níže.

Některé kanonické funkce můžete volat pomocí metod CLR (Common Language Runtime) v dotazech LINQ to Entities. Seznam metod CLR, které se mapuje na kanonické funkce, naleznete v tématu METODA CLR na Canonical Function Mapping.

Příklad 1

Následující příklad používá model AdventureWorks Sales Model. Příklad spustí dotaz LINQ to Entities, který pomocí DiffDays metody vrátí všechny produkty, pro které je rozdíl mezi SellEndDate a SellStartDate je menší než 365 dnů:

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

Příklad 2

Následující příklad používá model AdventureWorks Sales Model. Příklad volá agregační StandardDeviation metodu přímo k vrácení směrodatné odchylky SalesOrderHeader mezisoučtů. Všimněte si, že ObjectQuery<T> funkce je předána funkci, která umožňuje volat, aniž by byla součástí dotazu 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

Viz také