Dela via


Gör så här: Anropa kanoniska funktioner

Klassen EntityFunctions innehåller metoder som exponerar kanoniska funktioner som ska användas i LINQ för entitetsfrågor. Information om kanoniska funktioner finns i Kanoniska funktioner.

Kommentar

Metoderna AsUnicode och AsNonUnicode i EntityFunctions klassen har inte kanoniska funktionsekvivalenter.

Kanoniska funktioner som utför en beräkning på en uppsättning värden och returnerar ett enda värde (kallas även aggregerade kanoniska funktioner) kan anropas direkt. Andra kanoniska funktioner kan bara anropas som en del av en LINQ-till-entitetsfråga. Om du vill anropa en aggregeringsfunktion direkt måste du skicka en ObjectQuery<T> till funktionen. Mer information finns i det andra exemplet nedan.

Du kan anropa vissa kanoniska funktioner med hjälp av clr-metoder (common language runtime) i LINQ till entitetsfrågor. En lista över CLR-metoder som mappar till kanoniska funktioner finns i CLR-metoden till kanonisk funktionsmappning.

Exempel 1

I följande exempel används AdventureWorks-försäljningsmodellen. Exemplet kör en LINQ till entitetsfråga som använder DiffDays metoden för att returnera alla produkter för vilka skillnaden mellan SellEndDate och SellStartDate är mindre än 365 dagar:

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

Exempel 2

I följande exempel används AdventureWorks-försäljningsmodellen. Exemplet anropar aggregeringsmetoden StandardDeviation direkt för att returnera standardavvikelsen för SalesOrderHeader delsummor. Observera att en ObjectQuery<T> skickas till funktionen, vilket gör att den kan anropas utan att vara en del av en LINQ-till-entitetsfråga.

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

Se även