HOW TO:使用程式碼擴充查詢的功能
如果要以超越查詢設計工具功能的方式修改查詢,您可以透過撰寫程式碼來擴充查詢。
Visual Studio LightSwitch 結合您在查詢設計工具中指定的條件和您在程式碼中指定的條件,以產生查詢結果。 如需詳細資訊,請參閱查詢:從資料來源擷取資訊。
![]() |
---|
您無法擴充畫面的查詢。您只能擴充出現在 [方案總管] 中的查詢。如需編輯畫面之查詢的詳細資訊,請參閱 如何:篩選 Silverlight 螢幕上的資料。 |
若要透過使用程式碼擴充查詢
在 [查詢設計工具] 中開啟查詢。 如需詳細資訊,請參閱HOW TO:新增、移除和修改查詢。
在 [屬性] 視窗中,按一下 [編輯其他查詢程式碼]。
伺服器程式碼檔案隨即在 [程式碼編輯器] 中開啟。 表示查詢的方法會顯示在程式碼檔案中。 方法名稱以查詢名稱為開頭,並以 _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));
}
您不能透過使用查詢設計工具來設計這個查詢,原因如下:
訂單出現在客戶-訂單關聯性中「多」的一方。 查詢設計工具不允許您參考多重性為「多」的相關實體。
所有購買特定產品的客戶
下列查詢透過巡覽數個一對多關聯性,傳回所有購買特定產品的客戶。
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;
}
您不能使用查詢設計工具來設計這個查詢,因為查詢設計工具不允許您參考多重性為「多」的相關實體。
後續步驟
若要了解如何以視覺化方式設計查詢,請參閱 HOW TO:使用查詢設計工具設計查詢。
若要了解如何在畫面中使用查詢,請參閱 如何:篩選 Silverlight 螢幕上的資料。
若要了解如何在加入到應用程式中的自訂程式碼內執行查詢,請參閱 HOW TO:使用程式碼從查詢擷取資料。