Cómo: Llamar a funciones canónicas (LINQ to Entities)

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 (Entity SQL).

Dd456873.note(es-es,VS.100).gifNota:
Los métodos AsNonUnicode y AsUnicode 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 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 los métodos de CLR que se asignan a funciones canónicas, vea Asignar método CLR a función canónica.

Ejemplo

El ejemplo siguiente usa el Modelo AdventureWorks Sales. 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 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);
    }
}

El ejemplo siguiente usa el Modelo AdventureWorks Sales. 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 a la función, lo que permite llamarla aunque no forme parte de una consulta 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);
}

Vea también

Conceptos

Llamar a funciones en consultas de LINQ to Entities
Consultas en LINQ to Entities