2

我有一个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>吗?

4

1 回答 1

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

于 2013-10-06T20:47:21.770 回答