Практическое руководство. Вызов канонических функций

Класс EntityFunctions содержит методы, предоставляющие доступ к каноническим функциям для использования в запросах LINQ to Entities. Сведения о канонических функциях см. в разделе Канонические функции.

Примечание.

Методы AsUnicode и AsNonUnicode в классе EntityFunctions не имеют эквивалентных канонических функций.

Канонические функции, которые производят вычисление по ряду значений и возвращают одиночное значение (известные также как статистические канонические функции), могут вызываться напрямую. Другие канонические функции могут вызываться только в составе запроса LINQ to Entities. Чтобы вызвать агрегатную функцию напрямую, ей необходимо передать экземпляр ObjectQuery<T>. Дополнительные сведения см. в приведенном ниже втором примере.

Некоторые канонические функции можно вызвать с помощью методов среды CLR в запросах LINQ to Entities. Список методов СРЕДЫ CLR, сопоставленных с каноническими функциями, см. в разделе "Метод CLR" с каноническим сопоставлением функций.

Пример 1

В следующем примере используется модель AdventureWorks Sales. В этом примере выполняется запрос LINQ to Entities, в котором используется метод DiffDays для возврата всех продуктов, для которых разница между датами SellEndDate и SellStartDate меньше 365 суток:

using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    var products = from p in AWEntities.Products
                   where EntityFunctions.DiffDays(p.SellEndDate, p.SellStartDate) < 365
                   select p;
    foreach (var product in products)
    {
        Console.WriteLine(product.ProductID);
    }
}
Using AWEntities As New AdventureWorksEntities()
    Dim products = From p In AWEntities.Products _
                   Where EntityFunctions.DiffDays(p.SellEndDate, p.SellStartDate) < 365 _
                   Select p

    For Each product In products
        Console.WriteLine(product.ProductID)
    Next
End Using

Пример 2

В следующем примере используется модель AdventureWorks Sales. В этом примере напрямую вызывается статистическая функция StandardDeviation для возврата стандартного отклонения промежуточных итогов SalesOrderHeader. Обратите внимание, что в функцию передается экземпляр ObjectQuery<T>, что позволяет вызывать ее, хотя она и не входит в состав запроса LINQ to Entities.

using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    double? stdDev = EntityFunctions.StandardDeviation(
        from o in AWEntities.SalesOrderHeaders
        select o.SubTotal);

    Console.WriteLine(stdDev);
}
Using AWEntities As New AdventureWorksEntities()
    Dim stdDev As Double? = EntityFunctions.StandardDeviation( _
        From o In AWEntities.SalesOrderHeaders _
        Select o.SubTotal)

    Console.WriteLine(stdDev)
End Using

См. также