共用方式為


如何:呼叫資料庫函式

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

另請參閱