Почему 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>
, поэтому нет необходимости конвертировать словарь в первую очередь.