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

本文关键字:不起作用 ToLookup Dictionary 为什么 | 更新日期: 2023-09-27 18:34:05

我有一个代表某种内部数据容器的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>字典吗?

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

你可以试试这个:

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