如何:调用数据库函数 (LINQ to Entities)
SqlFunctions 类包含公开要在 LINQ to Entities 查询中使用的 SQL Server 函数的方法。 当您在 LINQ to Entities 查询中使用 SqlFunctions 方法时,将在数据库中执行相应的数据库函数。
注意: |
---|
可以直接调用对一组值执行计算并返回单个值的数据库函数(也称为聚合数据库函数)。其他规范函数只能作为 LINQ to Entities 查询的一部分调用。若要直接调用聚合函数,必须将 ObjectQuery 传递到此函数。有关更多信息,请参见下面的第二个示例。 |
注意: |
---|
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);
}