2014-04-24 3 views
0

Existe-t-il un moyen d'interroger une liste d'objets, de les grouper et de les afficher sous la forme d'une liste de listes? Je ne sais pas comment l'expliquer alors je vais vous montrer. J'ai une liste remplie de notes (List<Note> noteList). Il existe plusieurs créateurs et plusieurs notes pour chaque créateur. J'essaie de comprendre s'il existe un moyen d'utiliser une requête LINQ pour regrouper les notes par CreatorID, les séparer et les afficher sous la forme d'une liste de notes (List<List<Note>> creatorsNotes). De cette façon, je peux passer en revue créateursNotes pour obtenir des créateurs et leur liste de notes.Obtenir la liste de la liste d'objets de la requête linq

Répondre

6

Le plus simple serait d'utiliser ToLookup:

var groups = noteList.ToLookup(n => n.CreatorID); 

foreach(var group in groups) 
{ 
    Console.WriteLine("Items with CreatorID {0}", group.Key); 
    foreach(var item in group) 
      Console.WriteLine(" Title: {0}", item.Title); 
} 

Vous pouvez également utiliser GroupBy si nécessaire. Notez que ceux-ci ne créeront pas directement un List<List<Note>>, cependant. Si cela est nécessaire, vous pouvez faire:

List<List<Note>> grouped = noteList.GroupBy(n => n.CreatorID) 
            .Select(g => g.ToList()) 
            .ToList(); 
+0

+1 pour la stratégie 'ToLookup'. –

+0

Merci à vous deux pour les réponses. Reed's GroupBy m'a donné exactement ce que je voulais avec le moins de maux de tête. – Jeremy

0

Bien sûr, nous allons nous list être le List<Note>:

var creatorNotes = list 
    .GroupBy(note => note.CreatorID) 
    .Select(g => new 
    { 
     g.CreatorID, 
     Notes = g.ToList() 
    }) 
    .ToList(); 

Comme l'a souligné Reed, ceci est une liste d'un type anonyme qui indique groupés CreatorID à la racine ainsi que le Notes associé à celui CreatorID.

+0

Cela fera une liste d'un type anonyme contenant la clé + une liste. –

+0

@ReedCopsey, à droite, de sorte que l'OP est capable de savoir ce que le groupe est. Je suppose que c'est une autre façon d'aborder la stratégie de recherche que vous avez également fournie. –

Questions connexes