2009-08-24 4 views
4

для ясности позволяет говорить, что у нас есть ученики и классы, это много-много отношений.convert dictionary <int, Enumerable> to Dictionary <int, Enumerable> Инвертирующий контент

У меня есть словарь, где ключ является студенческим и перечислимым представляет собой набор классов (скажем, мы просто идентификатор), и я хочу, чтобы вернуть это к словарю 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);