Share via


Procedimiento para llamar a funciones canónicas

La clase EntityFunctions contiene métodos que exponen funciones canónicas para usarlas en consultas LINQ to Entities. Para obtener información sobre las funciones canónicas, vea Funciones canónicas.

Nota

Los métodos AsUnicode y AsNonUnicode de la clase EntityFunctions no tienen equivalentes de función canónica.

Las funciones canónicas que realizan un cálculo en un conjunto de valores y devuelven un valor único (también denominadas funciones canónicas de agregado) se pueden invocar directamente. Otras funciones canónicas solo se pueden llamar como parte de una consulta LINQ to Entities. Para llamar directamente a una función de agregado, debe pasar un objeto ObjectQuery<T> a la función. Para obtener más información, vea el segundo ejemplo siguiente.

Puede llamar a algunas funciones canónicas utilizando los métodos de Common Language Runtime (CLR) en consultas LINQ to Entities. Para obtener una lista de métodos CLR que se asignan a funciones canónicas, consulte Asignar un método CLR a una función canónica.

Ejemplo 1

En el siguiente ejemplo se usa el Modelo de ventas de AdventureWorks. En el ejemplo se ejecuta una consulta LINQ to Entities que utiliza el método DiffDays para devolver todos los productos para los que la diferencia entre SellEndDate y SellStartDate es menor a 365 días:

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

Ejemplo 2

En el siguiente ejemplo se usa el Modelo de ventas de AdventureWorks. El ejemplo llama directamente al método de agregado StandardDeviation para devolver la desviación estándar de subtotales SalesOrderHeader. Observe que se pasa un objeto ObjectQuery<T> a la función, lo que permite llamarla aunque no forme parte de una consulta 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

Consulte también