如何:呼叫資料庫函式
SqlFunctions 類別包含公開 SQL Server 函式以用於 LINQ to Entities 查詢的方法。 使用 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