Freigeben über


Lokale Methodenaufrufe

Ein lokaler Methodenaufruf ist ein Aufruf, der innerhalb des Objektmodells ausgeführt wird. Ein Remotemethodenaufruf ist ein Aufruf, den LINQ to SQL in SQL übersetzt und zur Ausführung an die Datenbank-Engine überträgt. Lokale Methodenaufrufe sind erforderlich, wenn LINQ to SQL den Aufruf nicht in SQL übersetzen kann. Andernfalls wird InvalidOperationException ausgelöst.

Beispiel 1

Im folgenden Beispiel wird eine Order Klasse der Tabelle "Orders" in der Northwind-Beispieldatenbank zugeordnet. Der Klasse wurde eine lokale Instanzmethode hinzugefügt.

In Abfrage 1 wird der Konstruktor für die Order Klasse lokal ausgeführt. Wenn LINQ to SQL in Abfrage 2 versucht hat, in SQL zu übersetzen LocalInstanceMethod(), schlägt der Versuch fehl, und eine InvalidOperationException Ausnahme würde ausgelöst. Da LINQ to SQL jedoch Unterstützung für lokale Methodenaufrufe bereitstellt, löst Query2 keine Ausnahme aus.

// 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

Siehe auch