Lokala metodanrop
Ett lokalt metodanrop är ett som körs i objektmodellen. Ett fjärrmetodanrop är ett som LINQ till SQL översätter till SQL och skickar till databasmotorn för körning. Lokala metodanrop behövs när LINQ till SQL inte kan översätta anropet till SQL. Annars kastas en InvalidOperationException .
Exempel 1
I följande exempel mappas en Order
klass till tabellen Beställningar i Northwind-exempeldatabasen. En lokal instansmetod har lagts till i klassen.
I fråga 1 körs konstruktorn för Order
klassen lokalt. Om LINQ till SQL försökte översätta LocalInstanceMethod()
till SQL i fråga 2 misslyckas försöket och ett InvalidOperationException undantag utlöses. Men eftersom LINQ till SQL har stöd för lokala metodanrop utlöser Query2 inget undantag.
// 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