本地方法调用

本地方法调用是在对象模型中执行的方法调用。 远程方法调用是 LINQ to SQL 转换成 SQL 并传输至数据库引擎执行的方法调用。 当 LINQ to SQL 无法将调用转换成 SQL 时,就需要本地方法调用。 否则会引发 InvalidOperationException

示例 1

在下面的示例中,Order 类将映射到 Northwind 示例数据库中的 Orders 表。 将一个本地实例方法添加到了此类。

在查询 1 中,Order 类的构造函数是在本地执行的。 在查询 2 中,如果 LINQ to SQL 尝试将 LocalInstanceMethod() 转换成 SQL,此尝试将失败并会引发 InvalidOperationException 异常。 但由于 LINQ to SQL 支持本地方法调用,所以查询 2 不会引发异常。

// 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

请参阅