ローカル メソッド呼び出し
ローカル メソッド呼び出しとは、オブジェクト モデル内で実行される呼び出しです。 リモート メソッド呼び出しとは、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 ではローカル メソッド呼び出しがサポートされているため、クエリ 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