为什么Dictionary.ToLookup()不起作用?

时间:2013-10-06 20:44:59

标签: c# linq dictionary lookup

我有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 个答案:

答案 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>,因此无需首先转换字典