如何:使用程式碼從查詢擷取資料
您可以從模型中擷取查詢,然後在程式碼中加以執行。 這可讓您使用您的應用程式商務邏輯來處理目標資料集合。
例如,您的模型可能含有一個名為 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;
}
}
}
後續步驟
若要了解如何使用設計工具以視覺化方式設計查詢,請參閱 如何:使用查詢設計工具設計查詢。
若要了解如何透過使用程式碼來擴充模型中的查詢,請參閱 如何:使用程式碼擴充查詢的功能。
請參閱
工作
逐步解說:在 LightSwitch 中設計 Silverlight 螢幕