Condividi tramite


Chiamate a metodo locali

Una chiamata al metodo locale viene eseguita all'interno del modello a oggetti. Una chiamata al metodo remota viene convertita da LINQ to SQL in SQL e trasmessa al motore di database per l'esecuzione. Le chiamate al metodo locali sono necessarie quando LINQ to SQL non è in grado di convertire la chiamata in SQL. In caso contrario, verrà generata un'eccezione InvalidOperationException.

Esempio 1

Nell'esempio seguente viene eseguito il mapping di una classe Order alla tabella Orders nel database di esempio Northwind. Alla classe è stato aggiunto un metodo di istanza locale.

Nella Query 1 il costruttore per la classe Order viene eseguito localmente. Nella Query 2 se LINQ to SQL tentasse di convertire LocalInstanceMethod() in SQL, l'operazione non verrebbe completata e verrebbe generata un'eccezione InvalidOperationException. Poiché tuttavia LINQ to SQL fornisce il supporto per le chiamate al metodo locali, nella Query 2 non viene generata un'eccezione.

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

Vedi anche