我有一个代表某种内部数据容器的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>
字典吗?
你可以试试这个:
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>
,因此无需首先转换字典。