HOW TO:使用程式碼從查詢擷取資料
您可以從模型中擷取查詢,然後在程式碼中加以執行。 這可讓您在應用程式商務邏輯中使用資料的目標集合。
例如,您的模型可能包含名為 Products in Stock 查詢。 若要判斷產品是否可用,您可以撰寫可擷取 Products in Stock 查詢的驗證程式碼,然後執行查詢。 執行查詢後,您的程式碼可以反覆查看結果集合。 如果這個集合中的產品符合目前銷售訂單中的產品,使用者可以通知客戶以告知延遲。
您還可以加入程式碼,透過使用 where 子句以縮小查詢結果。 使用 where 子句縮小查詢結果,可以提高效能,因為 where 子句的條件是套用在伺服器層。 如需詳細資訊,請參閱查詢:從資料來源擷取資訊。
範例:從查詢中擷取資料,並逐一查看結果
當使用者在銷售訂單中加入一個新行時,會呼叫下列 Helper 方法。 如果您有一個名為 Order_Details 的實體,可以從 Order_Details_Inserting 方法呼叫這個方法。
此程式碼透過執行名為 TopNSalesOrders 的查詢,根據銷售訂單擷取前十大客戶。 如果這個訂單的客戶 ID 符合查詢所傳回的任何客戶 ID,10% 折扣會套用至行項目。
Private Sub Good_Customer_Discount(ByVal entity As Order_Detail)
For Each cust As Customer In _
Me.DataWorkspace.NorthwindData.TopNSalesOrders(10)
If cust.CustomerID = entity.Order.Customer.CustomerID Then
entity.Discount = 0.1
End If
Next
End Sub
private void Good_Customer_Discount(Order_Detail entity)
{
foreach (Customer cust in this.DataWorkspace.NorthwindData.
TopNSalesOrders(10))
{
if (cust.CustomerID == entity.Order.Customer.CustomerID)
{
entity.Discount = 0.1F;
}
}
}
範例:透過套用 Where 子句,縮小查詢的結果
下列程式碼可做為上一個範例的替代方法。 此程式碼會將 where 子句套用至 TopNSalesOrders 查詢,而且只在客戶是目前訂單的下單者時,才會傳回客戶。
Private Sub Good_Customer_Discount2(ByVal entity As Order_Detail)
Dim query As IDataServiceQueryable(Of Customer)
query = From mycustomer In Me.DataWorkspace.NorthwindData.TopNSalesOrders(10)
Where mycustomer.CustomerID = entity.Order.Customer.CustomerID
Select mycustomer
If Not IsNothing(query.SingleOrDefault) Then
entity.Discount = 0.01
End If
End Sub
private void Good_Customer_Discount2(Order_Detail entity)
{
IDataServiceQueryable<Customer> query;
query = from myCustomer in this.DataWorkspace.NorthwindData.
TopNSalesOrders(10)
where myCustomer.CustomerID == entity.Order.Customer.CustomerID
select myCustomer;
if (query.SingleOrDefault() != null)
{
entity.Discount = 0.1F;
}
}
}
後續步驟
若要了解如何使用設計工具,以視覺化方式設計查詢,請參閱 HOW TO:使用查詢設計工具設計查詢。
若要了解如何透過使用程式碼來擴充模型中的查詢,請參閱 HOW TO:使用程式碼擴充查詢的功能。