我有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>
的字典吗?
答案 0 :(得分: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>
,因此无需首先转换字典