Как вызвать функции базы данных (язык LINQ to Entities)
Класс SqlFunctions содержит методы среды CLR, предоставляющие доступ к функциям SQL Server для использования в запросах LINQ to Entities. При использовании методов SqlFunctions в запросах LINQ to Entities в базе данных выполняются соответствующие функции базы данных.
Примечание |
---|
Функции базы данных, которые производят вычисление по ряду значений и возвращают одиночное значение (известные также как статистические функции баз данных), могут вызываться напрямую.Другие канонические функции могут вызываться только в составе запроса LINQ to Entities.Чтобы вызвать агрегатную функцию напрямую, ей необходимо передать экземпляр ObjectQuery.Дополнительные сведения см. в приведенном ниже втором примере. |
Примечание |
---|
Методы класса 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