2010-08-23 7 views
61

J'ai unLINQ - Convertir Liste à Dictionnaire avec Valeur Liste

List<MyObject> 

que je récupère de la base de données. Cependant, je voudrais qu'il soit saisi par une propriété dans MyObject à des fins de regroupement. Quelle est la meilleure façon avec LINQ pour lancer ma liste:

Dictionary<long, List<MyObject>> 

Je donne les résultats suivants:

myObjectList.ToDictionary(x => x.KeyedProperty) 

Mais il retourne:

Dictionary<long, MyObject> 
+0

Vous voulez que le dictionnaire soit associé à une propriété de QUELMoiObjet? - Vous avez toute une liste d'entre eux .... –

Répondre

123

On dirait que vous voulez groupe les instances MyObject par KeyedProperty et de mettre ce regroupement dans un Dictionary<long,List<MyObject>>. Si oui essayez ce qui suit

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

Vous devez utiliser le ToLookup extension method sur la Enumerable class comme ceci:

List<MyObject> list = ...; 

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

Si vous voulez placer que dans un dictionnaire, vous pouvez utiliser le ToDictionary extension method, comme si :

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