如何:使用代码从查询检索数据
您可以从模型中检索查询,然后使用代码执行这些查询。 这使您能够使用您的应用程序的业务逻辑中的数据的目标集合。
例如,您的模型可能包含名为 Products in Stock 的查询。 若要确定产品是否可用,您可以编写验证代码,检索 Products in Stock 查询,然后执行查询。 在该查询执行后,您的代码可以循环访问产生的集合。 如果在此集合中的产品与当前销售订单中的产品匹配,则用户可以通知客户有关延迟事宜。
您还可以通过使用 where 子句添加代码,以缩小查询的结果。 使用 where 子句来缩小查询结果,可以提高性能,因为 where 子句的条件将在服务器层应用。 有关更多信息,请参见 查询:从数据源检索信息。
示例:从查询中检索数据和循环访问结果
下面的帮助器方法在用户将新的行添加到销售订单时调用。 如果您有名为 Order_Details 的实体,则可从 Order_Details_Inserting 方法调用此方法。
通过执行名为 TopNSalesOrders 的查询,此代码会根据销售订单检索前 10 位客户。 如果下此订单的客户 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;
}
}
}
后续步骤
若要了解如何通过使用设计器以可视方式设计查询,请参见 如何:使用查询设计器设计查询。
若要了解如何通过使用代码在模型中扩展查询,请参见 如何:使用代码扩展查询。