分享方式:


區域方法呼叫

區域方法呼叫就是在物件模型 (Object Model) 內執行的呼叫。 遠端方法呼叫是 LINQ to SQL 轉譯為 SQL,並傳輸給資料庫引擎以執行的呼叫。 LINQ to SQL 無法將呼叫轉譯為 SQL 時,就需要區域方法呼叫。 否則會擲回 InvalidOperationException

範例 1

在下列範例中,Order 類別會對應至 Northwind 範例資料庫中的 Orders 資料表。 本機執行個體方法已加入至這個類別中。

在查詢 1 中,會在本機執行 Order 類別的建構函式。 在 Query 2 中,如果 LINQ to SQL 嘗試將 LocalInstanceMethod() 轉譯為 SQL,則嘗試會失敗,而且會擲回 InvalidOperationException 例外狀況。 但是因為 LINQ to SQL 支援區域方法呼叫,所以 Query 2 不會擲回例外狀況。

// Query 1.
var q1 =
    from ord in db.Orders
    where ord.EmployeeID == 9
    select ord;

foreach (var ordObj in q1)
{
    Console.WriteLine("{0}, {1}", ordObj.OrderID,
        ordObj.ShipVia.Value);
}
' Query 1.
Dim q0 = _
    From ord In db.Orders _
    Where ord.EmployeeID = 9 _
    Select ord

For Each ordObj In q0
    Console.WriteLine("{0}, {1}", ordObj.OrderID, _
        ordObj.ShipVia.Value)
Next
// Query 2.
public int LocalInstanceMethod(int x)
{
    return x + 1;
}

void q2()
{
    var q2 =
    from ord in db.Orders
    where ord.EmployeeID == 9
    select new
    {
        member0 = ord.OrderID,
        member1 = ord.LocalInstanceMethod(ord.ShipVia.Value)
    };
}
' Query 2.
Public Function LocalInstanceMethod(ByVal x As Integer) As Integer
    Return x + 1
End Function

Sub q2()
    Dim db As New Northwnd("")
    Dim q2 = _
    From ord In db.Orders _
    Where ord.EmployeeID = 9 _
    Select member0 = ord.OrderID, member1 = ord.LocalInstanceMethod(ord.ShipVia.Value)
End Sub

另請參閱