Compartilhar via


Como: Funções de base de dados de chamada

A classe de SqlFunctions contém os métodos que expõe funções do SQL Server para usar em consultas LINQ to Entities. Quando você usa métodos de SqlFunctions em consultas LINQ to Entities, as funções de base de dados correspondentes são executadas em base de dados.

Observação

Funções de base de dados que executar um cálculo em um conjunto de valores e retornar um valor único (também conhecido como funções de base de dados agregadas) podem ser chamadas diretamente. Outras funções canônicas só podem ser chamados como parte de uma consulta LINQ to Entities. Para chamar diretamente uma função agregada, você deve passar ObjectQuery<T> à função. Para obter mais informações, consulte o segundo exemplo abaixo.

Observação

Os métodos na classe de SqlFunctions são específicos para funções SQL Server. As classes semelhantes que expõe funções de base de dados podem estar disponíveis através de outros provedores.

Exemplo 1

O exemplo a seguir usa o Modelo de Vendas do AdventureWorks. O exemplo executa uma consulta LINQ to entidades que usa o método de CharIndex para retornar todos os contatos cujo nome começa com “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

Exemplo 2

O exemplo a seguir usa o Modelo de Vendas do AdventureWorks. O exemplo chama o método agregado de ChecksumAggregate diretamente. Observe que ObjectQuery<T> é passado para a função, que permite que é chamado sem ser parte de uma consulta 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

Confira também