如何:使用程式碼擴充查詢的功能

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

如果要以超越查詢設計工具功能的方式修改查詢,您可以透過撰寫程式碼來擴充查詢。
Visual Studio LightSwitch 會結合您在查詢設計工具中指定的條件和您在程式碼中指定的條件,來產生查詢結果。 如需詳細資訊,請參閱查詢:從資料來源擷取資訊

System_CAPS_ICON_note.jpg 注意

您無法擴充螢幕的查詢。 您只能擴充出現在 [方案總管] 中的查詢。 如需編輯螢幕之查詢的詳細資訊,請參閱 如何:篩選 Silverlight 螢幕上的資料

若要透過使用程式碼擴充查詢

  1. 在 [查詢設計工具] 中開啟查詢。 如需詳細資訊,請參閱 如何:新增、移除和修改查詢

  2. 在 [屬性] 視窗中,按一下 [編輯其他查詢程式碼]。

    伺服器程式碼檔案隨即在 [程式碼編輯器] 中開啟。 表示查詢的方法會顯示在程式碼檔案中。 方法名稱是以查詢名稱為開頭,並以 _PreprocessQuery 這個字為結尾。 例如,如果查詢的名稱是 GetCustomers,出現在程式碼編輯器中的方法名稱就是 GetCustomers_PreprocessQuery

  3. 透過將程式碼加入至這個方法來自訂查詢。 使用 LINQ 語法。 如需如何在 Visual Basic 中撰寫 LINQ 查詢的詳細資訊,請參閱Getting Started with LINQ in Visual Basic。 如需如何以 C# 撰寫查詢的詳細資訊,請參閱Getting Started with LINQ in C#

下列範例示範透過使用程式碼來修改查詢的兩種方式。

基於銷售訂單的前 N 大客戶

下面查詢會傳回下最多訂單的客戶。 名為 TopN 的參數會傳遞到方法。 TopN 參數會指定要在結果中傳回的客戶數目。

System_CAPS_ICON_note.jpg 注意

在查詢設計工具中加入參數。

        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 運算來計算訂單數。 查詢設計工具不支援使用 CountAggregateSum 等運算。

所有購買特定產品的客戶

下面查詢會透過巡覽數個一對多關聯性,傳回所有購買特定產品的客戶。

        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 螢幕上的資料

若要了解如何在加入至應用程式中的自訂程式碼內執行查詢,請參閱 如何:使用程式碼從查詢擷取資料

查詢:從資料來源擷取資訊
如何:新增、移除和修改查詢
Getting Started with LINQ in C#
Getting Started with LINQ in Visual Basic
LINQ

顯示: