28/06/11

Linq estrarre tutti i figli da una collezione di oggetti

Supponiamo di avere un oggetto Utente ed un oggetto Gruppo

public class Utente
  {
    public string Nome { get; set; }
    public IList<Gruppo> Gruppi { get; set; }
  }

  public class Gruppo
  {
    public string Descrizione { get; set; }
  }


Abbiamo un collezione di oggetti Utente, ciascuno dei quali ha a sua volta una collezione di gruppi

IList<Utente> list = new List<Utente>
                             {
                               new Utente()
                                 {
                                   Gruppi = new List<Gruppo>()
                                              {
                                                new Gruppo(){Descrizione = "GRUPPO1"},
                                                new Gruppo(){Descrizione = "GRUPPO2"},
                                              }
                                 },
                                                                new Utente()
                                 {
                                   Gruppi = new List<Gruppo>()
                                              {
                                                new Gruppo(){Descrizione = "GRUPPO3"},
                                                new Gruppo(){Descrizione = "GRUPPO4"},
                                              }
                                 }

                             };


Ora vogliamo estrarre tutti i gruppi di tutti gli utenti, ma se utilizziamo la Select di Linq otterremmo un IEnumerable di liste di oggetti Gruppo:

IEnumerable<IList<Gruppo>> gruppi = list.Select(x=>x.Gruppi);

Noi invece vogliamo semplicemente una lista di oggetti gruppo e quindi possiamo scrivere:
IEnumerable<Gruppo> gruppiList = list.SelectMany(x => x.Gruppi);

0 commenti:

Posta un commento

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Grants For Single Moms