C# 使用linq查询中的数据

C# 使用linq查询中的数据,c#,.net,sql-server,linq,C#,.net,Sql Server,Linq,我有一个非常简单的linq查询,它从两个数据表(orderHeader和OrderDetails)获取数据并将它们连接在一起。我想做的是获取每个订单的订单项,并将它们传递给一个方法进行处理 以下是查询: var results = from orderHeader in dtOrderHeader.AsEnumerable() join orderDetails in dtOrderDetails.AsEnumerable() on orderHeader.Field<int>

我有一个非常简单的linq查询,它从两个数据表(orderHeader和OrderDetails)获取数据并将它们连接在一起。我想做的是获取每个订单的订单项,并将它们传递给一个方法进行处理

以下是查询:

var results = from orderHeader in dtOrderHeader.AsEnumerable()
join orderDetails in dtOrderDetails.AsEnumerable() on 
  orderHeader.Field<int>("order_ref") equals
  orderDetails.Field<int>("order_id")
select new { 
  orderID = orderHeader.Field<int>("order_ref"), 
  orderItem = orderDetails.Field<string>("product_details") 
};
var results=来自dtOrderHeader.AsEnumerable()中的orderHeader
在上的dtOrderDetails.AsEnumerable()中加入orderDetails
orderHeader.Field(“order_ref”)等于
orderDetails.Field(“订单id”)
选择新{
orderID=orderHeader.Field(“order\u ref”),
orderItem=orderDetails.Field(“产品详细信息”)
};
迭代每个订单的结果的最佳方法是什么


谢谢

此结果集包含多个订单,这将需要一个嵌套的foreach

foreach (var order in results.Select(r => r.orderID).Distinct()) {
   Console.WriteLine("Order: " + order);
   Console.WriteLine("Items:");
   foreach (var product in results.Where(r => r.orderItem == order)) {
      Console.WriteLine(product.orderItem);
   }
}

foreach
有什么问题吗?您确定需要在那里加入
吗?也许你应该先按
分组,然后加入?对不起,这不是如何迭代,而是如何为每个订单拆分订单详细信息。我在考虑将结果存储在一个列表中,然后比较每次迭代的顺序号。好的,刚刚测试过的&var order包含一个整数值,而不是order对象。所以我不能输出为order.orderID.Oops,当您选择单个值“select(r=>r.orderID)”时,您将得到所选类型的列表。更正我的回答:)太好了!只需要在订单的输出上添加.toString()。谢谢你的帮助。还有一个问题。。。如果我希望能够从orderheader部分中提取出不仅仅是orderID的内容,那么如何实现这一点?