在物件模型中執行的呼叫是區域方法呼叫。 LINQ to SQL 會將遠端方法呼叫轉譯為 SQL 查詢,並傳輸至資料庫引擎以執行。 當 LINQ to SQL 無法將呼叫轉譯為 SQL 時,需要本機方法呼叫。 否則會拋出 InvalidOperationException。
範例 1
在下列範例中,類別 Order
會對應至 Northwind 範例資料庫中的 Orders 數據表。 本地實例方法已新增至一個類別。
在查詢 1 中,類別的 Order
建構函式會在本機執行。 在查詢 2 中,如果 LINQ to SQL 嘗試轉譯 LocalInstanceMethod()
為 SQL,則嘗試會失敗,而且 InvalidOperationException 會擲回例外狀況。 但由於 LINQ to SQL 支援本機方法呼叫,因此 Query2 不會擲回例外狀況。
// 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