Lokale methode-aanroepen
Een lokale methode-aanroep is een aanroep die wordt uitgevoerd in het objectmodel. Een aanroep van een externe methode is een aanroep die LINQ naar SQL vertaalt naar SQL en verzendt naar de database-engine voor uitvoering. Lokale methode-aanroepen zijn nodig wanneer LINQ naar SQL de aanroep niet kan omzetten in SQL. Anders wordt er een InvalidOperationException gegooid.
Voorbeeld 1
In het volgende voorbeeld wordt een Order
klasse toegewezen aan de tabel Orders in de voorbeelddatabase Northwind. Er is een lokale instantiemethode toegevoegd aan de klasse.
In Query 1 wordt de constructor voor de Order
klasse lokaal uitgevoerd. Als LINQ naar SQL in Query 2 probeert te vertalen LocalInstanceMethod()
naar SQL, mislukt de poging en wordt er een InvalidOperationException uitzondering gegenereerd. Maar omdat LINQ naar SQL ondersteuning biedt voor lokale methodeaanroepen, genereert Query2 geen uitzondering.
// 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