LINQ конвертировать словарь в поиск

У меня есть переменная типа Dictionary<MyType, List<MyOtherType>>
Я хочу преобразовать его в Lookup<MyType, MyOtehrType>.

Я хотел сначала использовать функции Lambda, сгладить словарь и затем преобразовать его в Lookup с помощью ToLookup(). Я застрял со словарем. Я думал об использовании SelectMany, но не могу заставить его работать. У кого-нибудь есть идея, как это сделать?

Ответ 1

Как насчет:

var lookup = dictionary.SelectMany(pair => pair.Value,
                                   (pair, Value) => new { pair.Key, Value })
                       .ToLookup(pair => pair.Key, pair => pair.Value);

Похоже, что это немного отвлекает, когда словарь уже имеет всю информацию, сгруппированную соответствующим образом, но я не вижу простого способа обойти это. Конечно, вы могли бы реализовать ILookup<TKey, TValue> самостоятельно с помощью обертки вокруг словаря...

Ответ 2

То же, что и метод Jon, но избегая создания анонимного типа:

var lookup = dictionary
            .SelectMany(p => p.Value, Tuple.Create)
            .ToLookup(p => p.Item1.Key, p => p.Item2);