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