Appels de méthodes locaux
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 transmet au moteur de base de données pour exécution. Les appels de méthode locaux sont nécessaires quand 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 Query 2, si LINQ to SQL a essayé de traduire LocalInstanceMethod()
en SQL, la tentative va échouer et une exception InvalidOperationException sera levée. Cependant, comme LINQ to SQL fournit la prise en charge pour les appels de méthode locaux, Query2 ne lèvera pas d’exception.
// 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