LINQ – 将列表转换为值为列表的字典

我有一个

List<MyObject> 

我从数据库中检索。 不过,我希望它通过MyObject中的一个属性来进行分组。 LINQ将我的列表转换为以下的最佳方式是:

 Dictionary<long, List<MyObject>> 

我有以下几点:

 myObjectList.ToDictionary(x => x.KeyedProperty) 

但它返回:

 Dictionary<long, MyObject> 

这听起来像你想通过KeyedProperty分组MyObject实例,并将该分组放入一个Dictionary<long,List<MyObject>> 。 如果是这样,请尝试以下操作

 List<MyObject> list = ...; var map = list .GroupBy(x => x.KeyedProperty) .ToDictionary(x => x.Key, x => x.ToList()); 

你应该像这样在Enumerable类上使用ToLookup扩展方法 :

 List<MyObject> list = ...; ILookup<long, MyObject> lookup = list.ToLookup(o => o.KeyedProperty); 

如果你想把它放在字典中,那么你可以使用ToDictionary扩展方法 ,如下所示:

 IDictionary<long, IEnumerable<MyObject>> dictionary = lookup.ToDictionary( l => l.Key);