Share via


방법: 쿼리에서 모델 정의 함수 호출(LINQ to Entities)

이 항목에서는 LINQ to Entities 쿼리 내에서 개념적 모델에 정의된 함수를 호출하는 방법에 대해 설명합니다.

다음 절차에서는 LINQ to Entities 쿼리 내에서 모델에 정의된 함수를 호출하는 방법에 대해 간단히 설명합니다. 절차 다음에 나오는 예제에서는 절차의 단계를 보다 자세히 설명합니다. 이 절차에서는 사용자가 개념적 모델에서 함수를 정의했다고 가정합니다. 자세한 내용은 How to: Define Custom Functions in the Conceptual Model를 참조하십시오.

개념적 모델에 정의된 함수를 호출하려면

  1. 개념적 모델에 정의된 함수로 매핑되는 CLR(공용 언어 런타임) 메서드를 응용 프로그램에 추가합니다. 메서드를 매핑하려면 메서드에 EdmFunctionAttribute를 적용해야 합니다. 특성의 NamespaceNameFunctionName 매개 변수는 각각 개념적 모델의 네임스페이스 이름과 함수 이름입니다. LINQ에서 함수 이름을 확인할 때는 대/소문자가 구분됩니다.

  2. LINQ to Entities 쿼리에서 이 함수를 호출합니다.

예제

다음 예제에서는 개념적 모델에 정의된 함수를 LINQ to Entities 쿼리 내에서 호출하는 방법을 보여 줍니다. 이 예제에서는 School 모델을 사용합니다. School 모델에 대한 자세한 내용은 School 샘플 데이터베이스 만들기(Entity Framework 퀵 스타트)School .edmx 파일 생성(Entity Framework 퀵 스타트)을 참조하십시오.

다음의 개념적 모델 함수는 강사가 고용된 이후 경과된 년 수를 반환합니다. 개념적 모델에 함수를 추가하는 방법은 How to: Define Custom Functions in the Conceptual Model를 참조하십시오.

<Function Name="YearsSince" ReturnType="Edm.Int32">
  <Parameter Name="date" Type="Edm.DateTime" />
  <DefiningExpression>
    Year(CurrentDateTime()) - Year(date)
  </DefiningExpression>
</Function>

다음에는 응용 프로그램에 아래 메서드를 추가하고 EdmFunctionAttribute를 사용하여 이 메서드를 개념적 모델 함수에 매핑합니다.

<EdmFunction("SchoolModel", "YearsSince")>
Public Function YearsSince(ByVal date1 As DateTime) _
    As Integer
    Throw New NotSupportedException("Direct calls are not supported.")
End Function
[EdmFunction("SchoolModel", "YearsSince")]
public static int YearsSince(DateTime date)
{
    throw new NotSupportedException("Direct calls are not supported.");
}

이제 LINQ to Entities 쿼리 내에서 개념적 모델 함수를 호출할 수 있습니다. 다음 코드에서는 고용된 지 10년이 넘은 모든 강사를 표시하는 메서드를 호출합니다.

Using context As New SchoolEntities()
    ' Retrieve instructors hired more than 10 years ago.
    Dim instructors = From p In context.People _
        Where YearsSince(CType(p.HireDate, DateTime?)) > 10 _
        Select p

    For Each instructor In instructors
        Console.WriteLine(instructor.LastName)
    Next
End Using
using (SchoolEntities context = new SchoolEntities())
{
    // Retrieve instructors hired more than 10 years ago.
    var instructors = from p in context.People
                      where YearsSince((DateTime)p.HireDate) > 10
                      select p;

    foreach (var instructor in instructors)
    {
        Console.WriteLine(instructor.LastName);
    }
}

참고 항목

작업

방법: 모델 정의 함수를 개체 메서드로 호출(LINQ to Entities)

개념

LINQ to Entities의 쿼리
LINQ to Entities 쿼리의 함수 호출

기타 리소스

.edmx File Overview