Перевернуть словарь очень просто:
var newDic = oldDic.ToDictionary(x => x.Value, x => x.Key);
Вот и все.
Теперь ваш вопрос другой. Речь идет об изменении отношения «многие ко многим», установленного в словаре.
Итак, допустим, у вас есть словарь >. Идея состоит в том, чтобы извлечь из этого «средний стол» отношения «многие ко многим». Затем вы можете перегруппировать его на другой стороне и преобразовать в словарь.
Для первой части мы будем использовать перегрузку SelectMany, которая
"Проецирует каждый элемент последовательности на
IEnumerable ,
выравнивает полученные последовательности в
одна последовательность, и вызывает результат
функция выбора на каждом элементе
в нем. "
var table =
dict.SelectMany(
x => x.Value,
(dictEntry, entryElement) => new
{
Entity1 = dictEntry.Key,
Entity2 = entryElement
}
);
Итак, теперь вам просто нужно перегруппировать эту таблицу так, как вы хотите, а затем преобразовать ее в словарь.
var newDict =
table
.GroupBy(x => x.Entity2,
x => x.Entity1,
(entity2, entity1) => new {entity1, entity2})
.ToDictionary(x => x.entity2, x => x.entity1);