2010-08-18 5 views
0

J'ai une requête linq très simple qui obtient des données de deux datatables (orderHeader & OrderDetails) et les joint ensemble. Ce que je voudrais faire est de prendre les articles de commande pour chaque commande et de les passer à une méthode de traitement.Utilisation des données de la requête linq

Voici la requête:

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

Quelle est la meilleure façon de parcourir les résultats pour chaque commande?

Merci

+4

de 'ya un problème avec foreach'? – leppie

+0

Etes-vous sûr de vouloir y joindre 'join'? Peut-être devriez-vous vous «grouper» d'abord, puis «rejoindre»? – Kobi

+0

Désolé, ce n'est pas tellement comment itérer, c'est la façon dont je peux séparer les détails de la commande pour chaque commande. Je pensais à stocker les résultats dans une liste, puis à comparer le numéro de commande à chaque itération. – StuffandBlah

Répondre

1

Ce résultat contient plusieurs commandes, cela nécessiterait un foreach imbriqué

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

Vous êtes la vedette! Merci – StuffandBlah

+0

Ok, juste testé & var commande contient une valeur entière plutôt que l'objet de commande. Donc, je ne peux pas sortir en tant que order.orderID. – StuffandBlah

+0

Oups, lorsque vous sélectionnez une seule valeur "Sélectionnez (r => r.orderID)", vous obtenez une liste du type que vous avez sélectionné. Corrigé ma réponse :) – Fabian

Questions connexes