LINQ - 将列表转换为字典,值为列表

时间:2010-08-23 15:35:43

标签: c# .net linq

我有一个

List<MyObject> 

我从数据库中检索。但是,我希望它由MyObject中的属性键入以进行分组。 LINQ将我的列表转换为以下内容的最佳方法是什么:

Dictionary<long, List<MyObject>>

我有以下内容:

myObjectList.ToDictionary(x => x.KeyedProperty)

但它返回:

Dictionary<long, MyObject>

2 个答案:

答案 0 :(得分:148)

听起来您希望按MyObjectKeyedProperty个实例进行分组,并将该分组放入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);
相关问题