如何:调用数据库函数 (LINQ to Entities)

SqlFunctions 类包含公开要在 LINQ to Entities 查询中使用的 SQL Server 函数的方法。 当您在 LINQ to Entities 查询中使用 SqlFunctions 方法时,将在数据库中执行相应的数据库函数。

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

Dd456858.note(zh-cn,VS.100).gif注意:
SqlFunctions 类中的方法特定于 SQL Server 函数。通过其他提供程序可能能够提供公开数据库函数的相似类。

示例

下面的示例使用 AdventureWorks 销售模型。 此示例执行一个 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 销售模型。 此示例直接调用聚合 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 中的查询