Partager via


Appels de méthode locaux (LINQ to SQL)

Mise à jour : November 2007

Un appel de méthode local est un appel exécuté dans le modèle objet. Un appel de méthode distant est un appel que LINQ to SQL traduit en SQL et est transmis au moteur de base de données pour l'exécution. Les appels de méthode locaux sont nécessaires lorsque LINQ to SQL ne peut pas traduire l'appel en SQL. Sinon, une exception InvalidOperationException est levée.

Exemple 1

Dans l'exemple suivant, une classe Order est mappée à la table Orders dans l'exemple de base de données Northwind. Une méthode d'instance locale a été ajoutée à la classe.

Dans Query1, le constructeur de la classe Order est exécuté localement. Dans Query2, si LINQ to SQL a essayé de traduire LocalInstanceMethod() en SQL, la tentative échoue et une exception InvalidOperationException est levée. Toutefois, comme LINQ to SQL fournit le support pour les appels de méthode locaux, Query2 ne lèvera pas d'exception.

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

Voir aussi

Autres ressources

Informations générales (LINQ to SQL)