2010-08-18 51 views
0

我有一個非常簡單的linq查詢,它從兩個數據表(orderHeader & OrderDetails)獲取數據並將它們連接在一起。我想要做的是將每個訂單的訂單項目傳遞給一個處理方法。使用來自linq查詢的數據

下面是該查詢:

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") 
}; 

什麼是迭代每個訂單的結果的最佳方式是什麼?

感謝

+4

任何問題'foreach'? – leppie 2010-08-18 08:37:19

+0

你確定你需要'加入'嗎?也許你應該先分組,然後加入? – Kobi 2010-08-18 08:42:00

+0

對不起,如何迭代並不多,這是我如何分割每個訂單的訂單細節。我正在考慮將結果存儲在列表中,然後比較每次迭代的訂單號。 – StuffandBlah 2010-08-18 08:45:53

回答

1

此結果集包含多個訂單,這將需要一個嵌套的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); 
    } 
} 
+0

你明星!謝謝 – StuffandBlah 2010-08-18 08:48:59

+0

好的,剛剛測試過&var order包含一個整數值而不是order對象。所以我不能輸出order.orderID。 – StuffandBlah 2010-08-18 09:25:26

+0

糟糕,當您選擇單個值「選擇(r => r.orderID)」時,您會得到所選類型的列表。更正了我的答案:) – Fabian 2010-08-18 10:23:03