Share via


Procedimiento para llamar a funciones de base de datos

La clase SqlFunctions contiene métodos que exponen funciones de SQL Server para usarlas en consultas LINQ to Entities. Al usar los métodos SqlFunctions en consultas LINQ to Entities, las funciones de base de datos correspondientes se ejecutan en la base de datos.

Nota

Las funciones de base de datos que realizan un cálculo en un conjunto de valores y devuelven un valor único (también denominadas funciones de agregado de base de datos) 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.

Nota

Los métodos de la clase SqlFunctions son específicos de las funciones de SQL Server. Es posible que otros proveedores dispongan de clases similares que exponen funciones de base de datos.

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 usa el método CharIndex para devolver todos los contactos cuyos apellidos empiezan por "Si":

using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    // SqlFunctions.CharIndex is executed in the database.
    var contacts = from c in AWEntities.Contacts
                   where SqlFunctions.CharIndex("Si", c.LastName) == 1
                   select c;

    foreach (var contact in contacts)
    {
        Console.WriteLine(contact.LastName);
    }
}
Using AWEntities As New AdventureWorksEntities()

    ' SqlFunctions.CharIndex is executed in the database.
    Dim contacts = From c In AWEntities.Contacts _
                   Where SqlFunctions.CharIndex("Si", c.LastName) = 1 _
                   Select c

    For Each contact In contacts
        Console.WriteLine(contact.LastName)
    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 ChecksumAggregate. 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())
{
    // SqlFunctions.ChecksumAggregate is executed in the database.
    decimal? checkSum = SqlFunctions.ChecksumAggregate(
        from o in AWEntities.SalesOrderHeaders
        select o.SalesOrderID);

    Console.WriteLine(checkSum);
}
Using AWEntities As New AdventureWorksEntities()

    ' SqlFunctions.ChecksumAggregate is executed in the database.
    Dim checkSum As Integer = SqlFunctions.ChecksumAggregate( _
        From o In AWEntities.SalesOrderHeaders _
        Select o.SalesOrderID)

    Console.WriteLine(checkSum)
End Using

Consulte también