Como: Chamar funções canônicas
A EntityFunctions classe contém métodos que expõem funções canônicas para uso em consultas LINQ to Entities. Para obter informações sobre funções canônicas, consulte Funções canônicas.
Nota
Os AsUnicode métodos e AsNonUnicode na classe não têm equivalentes de EntityFunctions função canônica.
As funções canônicas que executam um cálculo em um conjunto de valores e retornam um único valor (também conhecidas como funções canônicas agregadas) podem ser invocadas diretamente. Outras funções canônicas só podem ser chamadas como parte de uma consulta LINQ to Entities. Para chamar uma função agregada diretamente, você deve passar um ObjectQuery<T> para a função. Para obter mais informações, consulte o segundo exemplo abaixo.
Você pode chamar algumas funções canônicas usando métodos CLR (Common Language Runtime) em consultas LINQ to Entities. Para obter uma lista de métodos CLR mapeados para funções canônicas, consulte Método CLR para mapeamento de função canônica.
Exemplo 1
O exemplo a seguir usa o Modelo de Vendas AdventureWorks. O exemplo executa uma consulta LINQ to Entities que usa o DiffDays método para retornar todos os produtos para os quais a diferença entre SellEndDate
e SellStartDate
é inferior a 365 dias:
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
Exemplo 2
O exemplo a seguir usa o Modelo de Vendas AdventureWorks. O exemplo chama o método agregado StandardDeviation diretamente para retornar o desvio padrão dos SalesOrderHeader
subtotais. Observe que um ObjectQuery<T> é passado para a função, o que permite que ele seja chamado sem fazer parte de uma consulta 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