我有一个
List<MyObject>
我从数据库中检索。但是,我希望它由MyObject中的属性键入以进行分组。 LINQ将我的列表转换为以下内容的最佳方法是什么:
Dictionary<long, List<MyObject>>
我有以下内容:
myObjectList.ToDictionary(x => x.KeyedProperty)
但它返回:
Dictionary<long, MyObject>
答案 0 :(得分:148)
听起来您希望按MyObject
对KeyedProperty
个实例进行分组,并将该分组放入Dictionary<long,List<MyObject>>
。如果是,请尝试以下
List<MyObject> list = ...;
var map = list
.GroupBy(x => x.KeyedProperty)
.ToDictionary(x => x.Key, x => x.ToList());
答案 1 :(得分:14)
你应该使用ToLookup
extension method上的Enumerable
class,如下所示:
List<MyObject> list = ...;
ILookup<long, MyObject> lookup = list.ToLookup(o => o.KeyedProperty);
如果您想将其放在字典中,那么您可以使用ToDictionary
extension method,如下所示:
IDictionary<long, IEnumerable<MyObject>> dictionary = lookup.ToDictionary(
l => l.Key);