Поделиться через


Как вызвать функции базы данных (язык LINQ to Entities)

Класс SqlFunctions содержит методы среды CLR, предоставляющие доступ к функциям SQL Server для использования в запросах LINQ to Entities. При использовании методов SqlFunctions в запросах LINQ to Entities в базе данных выполняются соответствующие функции базы данных.

Dd456858.note(ru-ru,VS.100).gifПримечание
Функции базы данных, которые производят вычисление по ряду значений и возвращают одиночное значение (известные также как статистические функции баз данных), могут вызываться напрямую.Другие канонические функции могут вызываться только в составе запроса LINQ to Entities.Чтобы вызвать агрегатную функцию напрямую, ей необходимо передать экземпляр ObjectQuery.Дополнительные сведения см. в приведенном ниже втором примере.

Dd456858.note(ru-ru,VS.100).gifПримечание
Методы класса SqlFunctions поддерживаются только в функциях SQL Server.Аналогичные классы, предоставляющие функции баз данных, могут быть доступны в других поставщиках.

Пример

В следующем примере используется модель Модель AdventureWorks Sales. В примере выполняется запрос LINQ to Entities, в котором с помощью метода CharIndex возвращаются все контакты, в которых фамилия начинается с «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);
    }
}

В следующем примере используется модель Модель AdventureWorks Sales. В примере напрямую вызывается статистический метод ChecksumAggregate. Обратите внимание, что в функцию передается экземпляр ObjectQuery, что позволяет вызывать ее, хотя она и не входит в состав запроса 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);
}

См. также

Основные понятия

Вызов функций в запросах LINQ to Entities
Запросы в LINQ to Entities