2009-06-01 7 views
0

A partir de là:Comment utiliser LINQ pour récupérer collection enfant

public class Customer 
{ 
    public int CustomerID { get; set; } 
    public string CustomerName { get; set; } 
    public IList<Order> Orders { get; set; } 
} 

public class Order 
{ 
    public int OrderID { get; set; } 
    public int CustomerID { get; set; } 
} 

Quelle serait la requête LINQ que vous écrivez pour récupérer toutes les commandes de tous les clients?

Quelque chose à l'effet de:

IList<Order> orders = new List<Order>(); 
foreach (Customer c in Customers) 
{ 
    orders.Union(c.Orders); 
} 

j'ai essayé ce qui suit, mais il lance une "collection NHibernate n'était pas une association" exception:

var orders = from c in Customers 
      select c.Orders; 

Je sais que je manque quelque chose, mais je ne peux pas trouver un moyen d'y parvenir en linq.

Répondre

2
var orders = from c in db.Customers 
    from o in c.Orders 
    select o; 

Ou

var orders = db.Customers.SelectMany(c => c.Orders); 

aura-t-il travailler dans LINQ pour NHibernate? Je ne sais pas.

+0

J'ai essayé aussi, toujours obtenir le Error: collection n'était pas une association: Commandes. –

+1

Assurez-vous que nhibernate est conscient de l'association entre Client et Commande. Je parie qu'il y a un fichier XML quelque part qui nécessite une falsification. –

+0

J'ai essayé de jouer avec le fichier de mappage xml nhibernate sans succès jusqu'à présent. J'utilise l'entité pour l'objet Client et l'entité de collecte pour les commandes. Il y a différentes façons de configurer la relation (clé, un-à-plusieurs, clé-étrangère, élément-composite, etc.), certains travaillent ensemble mais d'autres pas ... Je posterai quelque chose quand je comprendre celui-là. Merci du coup de main jusqu'à présent. –

0

Assurez-vous que votre contrainte de clé étrangère est configurée correctement de [Order]. [CustomerID] à [Customer]. [ID] dans la base de données.

+0

J'ai la configuration de l'association de clé foreigh correctement dans la base de données. Si j'utilise la construction en boucle que j'ai écrite dans ma question initiale, tout fonctionne bien. –

Questions connexes