次の方法で共有


ローカル メソッドの呼び出し

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

こちらも参照ください