2009-08-24 9 views
4

Pour plus de clarté, disons que nous avons des étudiants et des classes, c'est une relation de plusieurs à plusieurs.convertir Dictionary <int, Enumerable> en Dictionary <int, Enumerable> en inversant le contenu

J'ai un dictionnaire où la clé est l'identifiant de l'élève et l'Enumerable est une collection de classes (par exemple, nous avons juste l'identifiant) et je veux revenir à un dictionnaire de CLASSID étudiants

est là un moyen de le faire avec Linq? Je peux penser à un moyen de le faire avec des boucles mais je suis sûr qu'il y a un moyen de le faire.

Répondre

7
var newDic = dic 
    .SelectMany(pair => pair.Value 
          .Select(val => new { Key = val, Value = pair.Key })) 
    .GroupBy(item => item.Key) 
    .ToDictionary(gr => gr.Key, gr => gr.Select(item => item.Value)); 
+0

Au début, je pensais que vous avez répondu à votre propre question. L'homme, je suis fatigué. – Amy

2

Cela devrait faire:

var invertedDic = dic 
    .SelectMany(x => x.Value, (pair, value) => new {key = pair.Key, value = value}) 
    .GroupBy(x => x.Value, x => x.Key, (value, key) => new {value, key}) 
    .ToDictionary(x => x.Value, x => x.Key); 
Questions connexes