如何:调用规范函数 (LINQ to Entities)

EntityFunctions 类包含公开要在 LINQ to Entities 查询中使用的规范函数的方法。 有关规范函数的信息,请参见规范函数 (Entity SQL)

Dd456873.note(zh-cn,VS.100).gif注意:
EntityFunctions 类中的 AsUnicodeAsNonUnicode 方法不具有规范函数等效性。

可以直接调用对一组值执行计算并返回单个值的规范函数(也成为聚合规范函数)。 其他规范函数只能作为 LINQ to Entities 查询的一部分调用。 若要直接调用聚合函数,必须将 ObjectQuery 传递到此函数。 有关更多信息,请参见下面的第二个示例。

可以在 LINQ to Entities 查询中使用公共语言运行时 (CLR) 方法调用某些规范函数。 有关映射到规范函数的 CLR 方法的列表,请参见 规范函数映射的 CLR 方法

示例

下面的示例使用 AdventureWorks 销售模型。 此示例执行一个 LINQ to Entities 查询,该查询使用 DiffDays 方法返回 SellEndDateSellStartDate 之间相差小于 365 天的所有产品:

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
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);
    }
}

下面的示例使用 AdventureWorks 销售模型。 此示例直接调用聚合 StandardDeviation 方法,以返回 SalesOrderHeader 小计的标准偏差。 请注意,应将 ObjectQuery 传递给此函数,这样,就可以调用它而不需要使它成为 LINQ to Entities 查询的一部分。

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

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

    Console.WriteLine(stdDev);
}

另请参见

概念

调用 LINQ to Entities 查询中的函数
LINQ to Entities 中的查询