LINQ转换字典查找(LINQ Convert Dictionary to Lookup)

2019-07-19 02:24发布

我有类型的变量Dictionary<MyType, List<MyOtherType>>
我想将其转换为Lookup<MyType, MyOtehrType>

我想用LAMBDA功能首先,扁平化的字典,然后转换这个使用来查找ToLookup() 我被困用字典。 我想过使用,但的SelectMany无法得到它的工作。 任何人有一个想法如何做到这一点?

Answer 1:

怎么样:

var lookup = dictionary.SelectMany(pair => pair.Value,
                                   (pair, Value) => new { pair.Key, Value })
                       .ToLookup(pair => pair.Key, pair => pair.Value);

它感觉的这样当字典已经有适当分组的所有信息的浪费一点点,但我不能看到一个简单的方法一轮。 当然,你可以实现ILookup<TKey, TValue>与各地字典的包装自己......



Answer 2:

同乔恩的方法,但避免了一个匿名类型的创建:

var lookup = dictionary
            .SelectMany(p => p.Value, Tuple.Create)
            .ToLookup(p => p.Item1.Key, p => p.Item2);


文章来源: LINQ Convert Dictionary to Lookup