Procedura: chiamare funzioni di database

La classe SqlFunctions contiene metodi che espongono funzioni SQL Server da usare nelle query LINQ to Entities. Quando si usano metodi SqlFunctions nelle query LINQ to Entities, le funzioni di database corrispondenti vengono eseguite nel database.

Nota

Le funzioni di database che eseguono un calcolo su un set di valori e restituiscono un valore singolo (anche note come funzioni di database di aggregazione) possono essere richiamate direttamente. Altre funzioni canoniche possono essere chiamate solo come parte di una query LINQ to Entities. Per chiamare direttamente una funzione di aggregazione, è necessario passare un oggetto ObjectQuery<T> alla funzione. Per altre informazioni, vedere il secondo esempio che segue.

Nota

Questi metodi nella classe SqlFunctions sono specifici delle funzioni SQL Server. Classi simili che espongono funzioni di database possono essere disponibili tramite altri provider.

Esempio 1

Nell'esempio seguente viene usato il Modello Sales di AdventureWorks. Nell'esempio viene eseguita una query LINQ to Entities che usa il metodo CharIndex per restituire tutti i contatti il cui cognome inizia con "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

Esempio 2

Nell'esempio seguente viene usato il Modello Sales di AdventureWorks. Nell'esempio viene chiamato direttamente il metodo di aggregazione ChecksumAggregate. Si noti che alla funzione viene passato un oggetto ObjectQuery<T>, che consente alla funzione di essere chiamata senza essere parte di una query 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

Vedi anche