Share via


로컬 메서드 호출(LINQ to SQL)

로컬 메서드 호출은 개체 모델 내에서 실행되는 작업입니다. 원격 메서드 호출은 LINQ to SQL에서 SQL로 변환하고 실행을 위해 데이터베이스 엔진으로 전송하는 작업입니다. 로컬 메서드 호출은 LINQ to SQL에서 호출을 SQL로 변환할 수 없는 경우 필요합니다. 그렇지 않으면 InvalidOperationException이 throw됩니다.

예제 1

다음 예제에서는 Order 클래스를 Northwind 샘플 데이터베이스의 Orders 테이블에 매핑합니다. 로컬 인스턴스 메서드가 해당 클래스에 추가됩니다.

쿼리 1에서 Order 클래스의 생성자는 로컬로 실행됩니다. 쿼리 2에서 LINQ to SQL이 LocalInstanceMethod()를 SQL로 변환을 시도하면 해당 시도는 실패하고 InvalidOperationException 예외가 throw됩니다. 그러나 LINQ to SQL에서 로컬 메서드 호출을 지원하기 때문에 쿼리 2에서는 예외를 throw하지 않습니다.

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

참고 항목

기타 리소스

배경 정보(LINQ to SQL)