Aufrufe einer lokalen Methode (LINQ to SQL)

Aktualisiert: November 2007

Ein Aufruf einer lokalen Methode wird innerhalb des Objektmodells ausgeführt. Ein Remotemethodenaufruf wird von LINQ to SQL in SQL übersetzt und zur Ausführung an das Datenbankmodul übergeben. Aufrufe einer lokalen Methode werden benötigt, wenn LINQ to SQL den Aufruf nicht in SQL übersetzen kann. Andernfalls wird eine InvalidOperationException ausgelöst.

Beispiel 1

Im folgenden Beispiel wird veranschaulicht, wie eine Order-Klasse der Tabelle Bestellungen in der Datenbank Northwind zugewiesen wird. Eine lokale Instanzmethode wurde der Klasse hinzugefügt.

In Abfrage 1 wird der Konstruktor für die Order-Klasse lokal ausgeführt. Hat LINQ to SQL in Abfrage 2 versucht, LocalInstanceMethod() in SQL zu übersetzen, würde der Versuch fehlschlagen, und eine InvalidOperationException-Ausnahme würde ausgelöst. Aber da LINQ to SQL Aufrufe einer lokalen Methode unterstützt, löst Abfrage 2 keine Ausnahme aus.

' 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 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 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
// 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)
    };
}

Siehe auch

Weitere Ressourcen

Hintergrundinformationen (LINQ to SQL)