Cómo: Llamar a funciones de base de datos (LINQ to Entities)
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 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
El ejemplo siguiente usa el Modelo AdventureWorks Sales. 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 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
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);
}
}
El ejemplo siguiente usa el Modelo AdventureWorks Sales. El ejemplo llama directamente al método de agregado ChecksumAggregate. 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()
' 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
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);
}
Vea también
Conceptos
Llamar a funciones en consultas de LINQ to Entities
Consultas en LINQ to Entities