Почему Dictionary.ToLookup() не работает?

У меня есть Dictionary<TType, List<TData>> который представляет собой своего рода внутренний контейнер данных. Элементы TData сгруппированы по типу TType.

Пользователь может запросить мой словарь и должен получить ILookup<TType, TData> в результате. Самый простой запрос - вернуть весь контейнер данных:

public ILookup<TType, TData> QueryEverything ()
{
    return _data.ToLookup(kvp => kvp.Key, kvp => kvp.Value);
}

Однако это не работает. Зачем? Разве это не поиск ничего, кроме словаря Key => IEnumerable<Value>?

1 ответ

Решение

Вы можете попробовать это:

public ILookup<TType, TData> QueryEverything ()
{
    return _data.SelectMany(kvp => p.Value.Select(x => new { kvp.Key, Value = x }))
                .ToLookup(kvp => kvp.Key, kvp => kvp.Value);
}

Конечно, вместо анонимного типа, вы можете создать KeyValuePair<TType, TData> или Tuple<TType, TData> так же легко.

Или, возможно, лучшее решение (если вам удастся реорганизовать свой код) - это изменить свой личный _data словарь для ILookup<TType, TData>, поэтому нет необходимости конвертировать словарь в первую очередь.

Другие вопросы по тегам