방법: 코드를 사용하여 쿼리 확장
쿼리 디자이너의 기능을 뛰어 넘는 방식으로 쿼리를 수정하려는 경우에 코드를 추가하여 쿼리를 확장할 수 있습니다.
Visual Studio LightSwitch는 쿼리 디자이너에서 지정하는 조건을 쿼리 결과를 만드는 코드에서 지정한 조건과 결합합니다.자세한 내용은 쿼리: 데이터 소스에서 정보 검색를 참조하십시오.
[!참고]
화면의 쿼리는 확장할 수 없습니다.솔루션 탐색기에 표시되는 쿼리는 확장만 할 수 있습니다.화면의 쿼리를 편집하는 것에 대한 자세한 내용은 방법: Silverlight 화면에서 데이터 필터링을 참조하십시오.
코드를 사용하여 쿼리 확장
쿼리 디자이너에서 쿼리를 엽니다.자세한 내용은 방법: 쿼리 추가, 제거 및 수정를 참조하십시오.
속성 창에서 추가 쿼리 코드 편집을 클릭합니다.
코드 편집기에서 서버 코드 파일이 열립니다.쿼리를 나타내는 메서드가 코드 파일에 나타납니다.메서드 이름이 쿼리 이름으로 시작하고 단어 _PreprocessQuery로 끝납니다.예를 들어, 쿼리 이름이 GetCustomers이고 코드 편집기에 표시되는 메서드 이름은 GetCustomers_PreprocessQuery입니다.
이 메서드에 코드를 추가하여 쿼리를 사용자 지정합니다.LINQ 구문을 사용합니다.Visual Basic에서 LINQ 쿼리를 쓰는 방법에 대한 자세한 내용은 Visual Basic에서 LINQ 시작을 참조하십시오.C#에서 쿼리를 쓰는 방법에 대한 자세한 내용은 C#에서 LINQ 시작을 참조하십시오.
예제
다음 예제는 코드를 사용하여 쿼리를 수정하는 두 가지 방법을 보여 줍니다.
판매 주문 기준 상위 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과 같은 작업의 사용을 지원하지 않습니다.
특정 제품을 구매한 모든 고객
다음 쿼리는 여러 개의 일대다 관계를 탐색하여 특정 제품을 구매한 모든 고객을 반환합니다.
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 화면에서 데이터 필터링를 참조하십시오.
응용 프로그램에 추가하는 사용자 지정 코드에서 쿼리를 실행하는 방법을 배우려면 방법: 코드를 사용하여 쿼리에서 데이터 검색를 참조하십시오.