将Dictionary <int,enumerable =“”>转换为Dictionary <int,enumerable =“”>反转内容</int,> </int,>

时间:2009-08-24 21:38:22

标签: c# .net linq dictionary

为了清楚起见,我们说我们有学生和班级,这是一个多对多的关系。

我有一个词典,其中键是学生ID,而Enumerable是一个类的集合(比如我们只有id),我想将它恢复为classId的词典,学生

有没有办法用Linq做到这一点?我可以想办法用循环来做这个,但我确信有办法做到这一点。

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分: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);