Condividi tramite


Procedura: chiamare funzioni canoniche (LINQ to Entities)

La classe EntityFunctions contiene metodi che espongono funzioni canoniche da utilizzare nelle query LINQ to Entities. Per informazioni sulle funzioni canoniche, vedere Funzioni canoniche (Entity SQL).

Dd456873.note(it-it,VS.100).gifNota:
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 alla funzione. Per ulteriori 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 di metodi CLR mappati alle funzioni canoniche, vedere Mapping dei metodi CLR alle funzioni canoniche.

Esempio

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

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
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);
    }
}

Nell'esempio seguente viene utilizzato 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, che consente alla funzione di essere chiamata senza essere parte di una query LINQ to Entities.

Using AWEntities As New AdventureWorksEntities()
    Dim stdDev As Double? = EntityFunctions.StandardDeviation( _
        From o In AWEntities.SalesOrderHeaders _
        Select o.SubTotal)

    Console.WriteLine(stdDev)
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    double? stdDev = EntityFunctions.StandardDeviation(
        from o in AWEntities.SalesOrderHeaders
        select o.SubTotal);

    Console.WriteLine(stdDev);
}

Vedere anche

Concetti

Chiamata di funzioni nelle query LINQ to Entities
Query in LINQ to Entities