2016-01-13 14 views
8

Ho una lista dei Foo:Converti Lista <T> in un altro elenco <T> che contiene un altro elenco <T>

class Foo { 
    public int Id { get; set; } 
    public String Name { get; set; } 
} 

E voglio convertirlo in un elenco Bar:

class Bar { 
    public int Id { get; set } 
    public List<String> NameList { get; set; } 
} 

I dati in Foo assomiglia a questo:

Id  Name 
----------- 
1  Foo1 
1  Foo2 
1  Foo3 
2  Foo3 
2  Foo2 
2  Foo1 

E voglio che guardi In questo modo:

Id  NameList 
---------------- 
1  Foo1 
     Foo2 
     Foo3 
2  Foo3 
     Foo2 
     Foo1 

Lo sto facendo in modo che sia più facile da visualizzare in una lista non ordinata di Razor reso in Html. Inoltre, se c'è un modo semplice per farlo senza conversione, per favore fatemelo sapere.

In definitiva, io visualizzare il codice HTML in questo modo:

<li>1 
    <ul> 
     <li>Foo1</li> 
     <li>Foo2</li> 
     <li>Foo3</li> 
    </ul> 
</li> 
<li>2 
    <ul> 
     <li>Foo3</li> 
     <li>Foo2</li> 
     <li>Foo1</li> 
    </ul> 
</li> 

Finora ho provato il seguente codice LINQ, ma non ha funzionato

BarList = FooList.Select(x => new Bar() { 
    Id = x.Id, 
    NameList = x.Select(y => y.) 
}).ToList(); 
+1

Controllare l'istruzione 'GroupBy' di LINQ, fa esattamente questo. https://msdn.microsoft.com/en-us/library/bb545971.aspx –

+0

È necessario 'GroupBy', assolutamente. Ma potresti voler chiarire la tua uscita prevista, non ha molto senso. – Jonesopolis

+0

Whoops! All'inizio ho frainteso la domanda. Esegui comunque un'implementazione "GroupsOf": http://ideone.com/Z4mNWp –

risposta

9

Usa GroupBy.

List<Bar> BarList = FooList.GroupBy(f => f.Id, f => f.Name, (id, names) => new Bar 
{ 
    Id = id, 
    NameList = names.ToList() 
}).ToList(); 
Problemi correlati