Condividi tramite


Procedura: chiamare funzioni di database (LINQ to Entities)

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

Dd456858.note(it-it,VS.100).gifNota:
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 alla funzione.Per ulteriori informazioni, vedere il secondo esempio che segue.

Dd456858.note(it-it,VS.100).gifNota:
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

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

Nell'esempio seguente viene utilizzato 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, che consente alla funzione di essere chiamata senza essere parte di una query 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);
}

Vedere anche

Concetti

Chiamata di funzioni nelle query LINQ to Entities
Query in LINQ to Entities