Procedura: chiamare funzioni canoniche

La classe EntityFunctions contiene metodi che espongono funzioni canoniche da usare nelle query LINQ to Entities. Per informazioni sulle funzioni canoniche, vedere Funzioni canoniche.

Nota

I metodi AsUnicode e AsNonUnicode nella classe EntityFunctions non dispongono di equivalenti della funzione canonica.

Le funzioni canoniche che eseguono un calcolo su un set di valori e restituiscono un valore singolo (anche note come funzioni canoniche di aggregazione) possono essere richiamate direttamente. Altre funzioni canoniche possono essere chiamate solo come parte di una query LINQ to Entities. Per chiamare direttamente una funzione di aggregazione, è necessario passare un oggetto ObjectQuery<T> alla funzione. Per altre informazioni, vedere il secondo esempio che segue.

È possibile chiamare alcune funzioni canoniche tramite metodi Common Language Runtime (CLR) nelle query LINQ to Entities. Per un elenco dei metodi CLR mappati alle funzioni canoniche, vedere Metodo CLR al mapping di funzioni canoniche.

Esempio 1

Nell'esempio seguente viene usato il Modello Sales di AdventureWorks. Nell'esempio viene eseguita una query LINQ to Entities che usa il metodo DiffDays per restituire tutti i prodotti per i quali la differenza tra SellEndDate e SellStartDate è inferiore a 365 giorni:

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

Esempio 2

Nell'esempio seguente viene usato il Modello Sales di AdventureWorks. Nell'esempio viene chiamato direttamente il metodo di aggregazione StandardDeviation per restituire la deviazione standard dei subtotali SalesOrderHeader. Si noti che alla funzione viene passato un oggetto ObjectQuery<T>, che consente alla funzione di essere chiamata senza essere parte di una query 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

Vedi anche