다음을 통해 공유


방법: 코드를 사용하여 쿼리 확장

쿼리 디자이너의 기능을 뛰어 넘는 방식으로 쿼리를 수정하려는 경우에 코드를 추가하여 쿼리를 확장할 수 있습니다.

Visual Studio LightSwitch는 쿼리 디자이너에서 지정하는 조건을 쿼리 결과를 만드는 코드에서 지정한 조건과 결합합니다.자세한 내용은 쿼리: 데이터 소스에서 정보 검색를 참조하십시오.

[!참고]

화면의 쿼리는 확장할 수 없습니다.솔루션 탐색기에 표시되는 쿼리는 확장만 할 수 있습니다.화면의 쿼리를 편집하는 것에 대한 자세한 내용은 방법: Silverlight 화면에서 데이터 필터링을 참조하십시오.

코드를 사용하여 쿼리 확장

  1. 쿼리 디자이너에서 쿼리를 엽니다.자세한 내용은 방법: 쿼리 추가, 제거 및 수정를 참조하십시오.

  2. 속성 창에서 추가 쿼리 코드 편집을 클릭합니다.

    코드 편집기에서 서버 코드 파일이 열립니다.쿼리를 나타내는 메서드가 코드 파일에 나타납니다.메서드 이름이 쿼리 이름으로 시작하고 단어 _PreprocessQuery로 끝납니다.예를 들어, 쿼리 이름이 GetCustomers이고 코드 편집기에 표시되는 메서드 이름은 GetCustomers_PreprocessQuery입니다.

  3. 이 메서드에 코드를 추가하여 쿼리를 사용자 지정합니다.LINQ 구문을 사용합니다.Visual Basic에서 LINQ 쿼리를 쓰는 방법에 대한 자세한 내용은 Visual Basic에서 LINQ 시작을 참조하십시오.C#에서 쿼리를 쓰는 방법에 대한 자세한 내용은 C#에서 LINQ 시작을 참조하십시오.

예제

다음 예제는 코드를 사용하여 쿼리를 수정하는 두 가지 방법을 보여 줍니다.

Ff852040.collapse_all(ko-kr,VS.110).gif판매 주문 기준 상위 N위 고객

다음 쿼리는 가장 많은 수의 주문을 한 고객을 반환합니다.이름이 TopN인 매개 변수가 메서드로 전달됩니다.TopN 매개 변수는 결과로 반환할 고객의 수를 지정합니다.

[!참고]

쿼리 디자이너에 매개 변수를 추가합니다.

Private Sub TopNSalesOrders_PreprocessQuery _
    (ByVal TopN As System.Nullable(Of Short), _
     ByRef query As System.Linq.IQueryable(Of LS_Queries_VB.Customer))
    query = From myCustomer In query
           Where myCustomer.Orders.Count > 0
           Select myCustomer
           Order By myCustomer.Orders.Count Descending
           Take (TopN)
End Sub
partial void TopNSalesOrders_PreprocessQuery
    (short? TopN, ref IQueryable<Customer> query)
{
    query = (from myCustomer in query
             where myCustomer.Orders.Count() > 0
             orderby myCustomer.Orders.Count() descending
             select myCustomer).Take(System.Convert.ToInt16(TopN));
}

쿼리 디자이너를 사용하여 이 쿼리를 디자인할 수 없는 이유는 다음과 같습니다.

  • 주문이 고객-주문 관계의 여러 측에 나타납니다.쿼리 디자이너에서는 다수의 복합성을 갖고 있는 관련 엔터티를 참조할 수 없습니다.

  • 이 쿼리는 Count 작업을 사용하여 주문 수를 계산합니다.쿼리 디자이너는 Count, Aggregate, Sum과 같은 작업의 사용을 지원하지 않습니다.

Ff852040.collapse_all(ko-kr,VS.110).gif특정 제품을 구매한 모든 고객

다음 쿼리는 여러 개의 일대다 관계를 탐색하여 특정 제품을 구매한 모든 고객을 반환합니다.

Private Sub CustomersWhoBoughtProduct_PreprocessQuery _
    (ByVal ProductID As System.Nullable(Of Short), _
     ByRef query As System.Linq.IQueryable(Of LS_Queries_VB.Customer))
    query = From myCustomers In query
        From myOrders In myCustomers.Orders
        From myOrderDetails In myOrders.Order_Details
        Where myOrderDetails.Product.ProductID = ProductID
        Select Customers
End Sub
partial void CustomersWhoBoughtProduct_PreprocessQuery
    (short? ProductID, ref IQueryable<Customer> query)
{
    query = from myCustomers in query
            from myOrders in myCustomers.Orders
            from myOrderDetails in myOrders.Order_Details
            where myOrderDetails.Product.ProductID == ProductID
            select myCustomers;
}

쿼리 디자이너를 사용해서 이 쿼리를 디자인할 수 없습니다. 쿼리 디자이너는 다양성을 갖는 관련 엔터티를 참조하지 못하게 하기 때문입니다.

다음 단계

쿼리를 시각적으로 디자인하는 방법을 배우려면 방법: 쿼리 디자이너를 사용하여 쿼리 디자인를 참조하십시오.

화면에서 쿼리를 사용하는 방법을 배우려면 방법: Silverlight 화면에서 데이터 필터링를 참조하십시오.

응용 프로그램에 추가하는 사용자 지정 코드에서 쿼리를 실행하는 방법을 배우려면 방법: 코드를 사용하여 쿼리에서 데이터 검색를 참조하십시오.

참고 항목

작업

방법: 쿼리 추가, 제거 및 수정

기타 리소스

쿼리: 데이터 소스에서 정보 검색

C#에서 LINQ 시작

Visual Basic에서 LINQ 시작

Visual Basic의 LINQ