Share via


HOW TO:呼叫資料庫函式 (LINQ to Entities)

SqlFunctions 類別包含公開 SQL Server 函式以用於 LINQ to Entities 查詢的方法。 使用 LINQ to Entities 中的 SqlFunctions 方法時,對應的資料庫函式會在資料庫中執行。

Dd456858.note(zh-tw,VS.100).gif注意:
可直接叫用的資料庫函式,會執行值集的計算,然後傳回單一值 (亦稱為彙總資料庫函式)。呼叫的其他標準函式則做為 LINQ to Entities 查詢的一部份。若要直接呼叫彙總函式,您必須將 ObjectQuery 傳遞至函式。如需詳細資訊,請參閱下列第二個範例。

Dd456858.note(zh-tw,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 中的查詢