Сопоставление методов CLR с функциями
Платформа Entity Framework предоставляет набор канонических функций, которые реализуют операции над строками, математические функции и другую общую функциональность для многих систем баз данных. Это позволяет разработчикам работать с широким кругом систем баз данных. При вызове из технологии запросов (например, из LINQ to Entities) канонические функции преобразуются в соответствующую функцию хранилища для используемого поставщика. Это позволяет для различных источников данных выражать вызовы функций в общей форме, обеспечивая согласованность при применении запросов. Побитовые операторы AND, OR, NOT и XOR также сопоставляются с каноническими функциями, если операнд имеет числовой тип. Для операндов типа Boolean побитовые операторы AND, OR, NOT и XOR выполняют соответствующие логические операции. Дополнительные сведения см. в разделе Канонические функции (язык Entity SQL).
Для сценариев LINQ запросы к платформе Entity Framework включают сопоставление определенных методов CLR с методами базового источника данных через канонические функции. Любой вызов метода в запросе LINQ to Entities, который явно не сопоставлен с канонической функцией, приведет к активизации исключения времени выполнения NotSupportedException. Список методов CLR, сопоставленных с каноническими функциями, см. в разделе Сопоставление методов CLR с каноническими функциями.
Ниже приведен пример запроса к адресам, находящимся на улице Algiers Drive. Вызов метода Contains сопоставляется в запросе с канонической функцией IndexOf.
Using AWEntities As New AdventureWorksEntities()
Dim addresses As ObjectQuery(Of Address) = AWEntities.Address
Dim query = _
From address In addresses _
Where address.AddressLine1.Contains("Algiers Dr.") _
Select address
For Each algiersAddress As Address In query
Console.WriteLine("Address 1: " + algiersAddress.AddressLine1)
Next
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
ObjectQuery<Address> addresses = AWEntities.Address;
IQueryable<Address> query = from address in addresses
where address.AddressLine1.Contains("Algiers Dr.")
select address;
// Addresses on Algiers Dr.
foreach (Address algiersAddress in query)
{
Console.WriteLine("Address 1: " + algiersAddress.AddressLine1);
}
}
См. также
Основные понятия
Канонические функции (язык Entity SQL)