如何:调用数据库函数
SqlFunctions 类包含公开要在 LINQ to Entities 查询中使用的 SQL Server 函数的方法。 当您在 LINQ to Entities 查询中使用 SqlFunctions 方法时,将在数据库中执行相应的数据库函数。
备注
可以直接调用对一组值执行计算并返回单个值的数据库函数(也称为聚合数据库函数)。 其他规范函数只能作为 LINQ to Entities 查询的一部分调用。 若要直接调用聚合函数,必须将 ObjectQuery<T> 传递到此函数。 有关更多信息,请参见下面的第二个示例。
备注
SqlFunctions 类中的方法特定于 SQL Server 函数。 通过其他提供程序可能能够提供公开数据库函数的相似类。
示例 1
以下示例使用 AdventureWorks 销售模型。 此示例执行一个 LINQ to Entities 查询,该查询使用 CharIndex 方法返回其姓氏以“Si”开头的所有联系人:
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);
}
}
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
示例 2
以下示例使用 AdventureWorks 销售模型。 此示例直接调用聚合 ChecksumAggregate 方法。 请注意,应将 ObjectQuery<T> 传递给此函数,这样,就可以调用它而不需要使它成为 LINQ to Entities 查询的一部分。
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);
}
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