Megosztás a következőn keresztül:


Ú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

Lásd még