2009-08-24 8 views
4

明快にするために、学生とクラス、多対多の関係があるとします。Dictionary <int、Enumerable>をDictionary <int、Enumerable>に変換します。内容を反転する

がある学生、そこに私は、キーは、学生のIDですし、列挙、クラス(たとえば私たちはIDを持っている)の集合である辞書を持っていると私はCLASSIDの辞書にこれを元に戻したいですLinqでこれを行う方法?私はループでこれを行う方法を考えることができますが、私はこれを行う方法があると確信しています。

答えて

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

が最初に私はあなたがあなた自身の質問に答え思いました。私は疲れています。 – Amy

2

これは、実行する必要があります。

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); 
関連する問題