2010-08-23 14 views
61

Ho unLINQ - Convertire Lista dizionario con Value come elenco

List<MyObject> 

che ho recuperare dal database. Tuttavia, mi piacerebbe che fosse digitato da una proprietà in MyObject per scopi di raggruppamento. Qual è il modo migliore con LINQ per lanciare la mia lista a:

Dictionary<long, List<MyObject>> 

Ho il seguente:

myObjectList.ToDictionary(x => x.KeyedProperty) 

ma restituisce:

Dictionary<long, MyObject> 
+0

Si desidera che il dizionario sia codificato in una proprietà di WHICH MyObject? - ne hai un'intera lista ... –

risposta

123

Sembra che si desidera raggruppare le istanze MyObject di KeyedProperty e inseriscono tale raggruppamento in Dictionary<long,List<MyObject>>. Se è così allora provare quanto segue

List<MyObject> list = ...; 
var map = list 
    .GroupBy(x => x.KeyedProperty) 
    .ToDictionary(x => x.Key, x => x.ToList()); 
11

si dovrebbe usare il ToLookup extension method sul Enumerable class in questo modo:

List<MyObject> list = ...; 

ILookup<long, MyObject> lookup = list.ToLookup(o => o.KeyedProperty); 

Se si desidera inserire che in un dizionario, allora si potrebbe utilizzare il ToDictionary extension method, in questo modo :

IDictionary<long, IEnumerable<MyObject>> dictionary = lookup.ToDictionary(
    l => l.Key); 
Problemi correlati