Útmutató: Adatbázisfüggvények meghívása
Az SqlFunctions osztály olyan metódusokat tartalmaz, amelyek elérhetővé teszik az SQL Server-függvényeket a LINQ-ban az Entitások lekérdezések számára. Ha a LINQ metódusokat használ SqlFunctions az Entitások lekérdezésekhez, a megfelelő adatbázisfüggvények az adatbázisban lesznek végrehajtva.
Feljegyzés
Közvetlenül meghívhatók azok az adatbázisfüggvények, amelyek értékhalmazon végeznek számítást, és egyetlen értéket adnak vissza (más néven összesítő adatbázisfüggvényeket). Más canonical functions csak a LINQ to Entities lekérdezés részeként hívható meg. Ha egy összesítő függvényt közvetlenül szeretne meghívni, át kell adnia egy ObjectQuery<T> függvényt. További információkért lásd az alábbi második példát.
Feljegyzés
Az osztály metódusai az SqlFunctions SQL Server-függvényekre vonatkoznak. Az adatbázisfüggvényeket elérhetővé tevő hasonló osztályok más szolgáltatókon keresztül is elérhetők lehetnek.
1. példa
Az alábbi példa az AdventureWorks értékesítési modelljét használja. A példa egy LINQ-lekérdezést hajt végre az Entitások között, amely a metódus használatával visszaadja az CharIndex összes olyan partnert, akinek a vezetékneve "Si" betűvel kezdődik:
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
2. példa
Az alábbi példa az AdventureWorks értékesítési modelljét használja. A példa közvetlenül meghívja az összesítő metódust ChecksumAggregate . Vegye figyelembe, hogy a függvény átad egy ObjectQuery<T> függvényt, amely lehetővé teszi, hogy anélkül hívható meg, hogy a LINQ része lenne az Entitások lekérdezésnek.
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