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

Bra*_*don 88 .net c# linq

我有一个

List<MyObject> 
Run Code Online (Sandbox Code Playgroud)

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

Dictionary<long, List<MyObject>>
Run Code Online (Sandbox Code Playgroud)

我有以下内容:

myObjectList.ToDictionary(x => x.KeyedProperty)
Run Code Online (Sandbox Code Playgroud)

但它返回:

Dictionary<long, MyObject>
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 165

听起来你想要对MyObject实例进行KeyedProperty分组并将该分组放入Dictionary<long,List<MyObject>>.如果是,请尝试以下操作

List<MyObject> list = ...;
var map = list
  .GroupBy(x => x.KeyedProperty)
  .ToDictionary(x => x.Key, x => x.ToList());
Run Code Online (Sandbox Code Playgroud)


cas*_*One 15

您应该在上使用ToLookup扩展方法,如下所示:Enumerable

List<MyObject> list = ...;

ILookup<long, MyObject> lookup = list.ToLookup(o => o.KeyedProperty);
Run Code Online (Sandbox Code Playgroud)

如果要将其放在字典中,则可以使用ToDictionary扩展方法,如下所示:

IDictionary<long, IEnumerable<MyObject>> dictionary = lookup.ToDictionary(
    l => l.Key);
Run Code Online (Sandbox Code Playgroud)