使用Linq将对象字段选择到地图中

时间:2019-05-13 08:28:12

标签: c# .net linq

我是Linq的新手。我有一个包含字段的对象列表

userId, companyId

我需要组装一个字典:

Dictionary Key= companyId
Dictionary Value = List(UserId that belong to companyId).

我可以使用Linq实现此功能吗?如果可以,可以通过哪种方式实现?

2 个答案:

答案 0 :(得分:1)

您可以.GroupBy() companyId并使用.ToDictionary()扩展方法将分组直接转换为字典:

var dictPerCompany = 
    sourceList.GroupBy(src => src.companyId)
              .ToDictionary(gr => gr.Key, gr => gr.Select(val => val.userId).ToList());

这将生成一个Dictionary<int, List<int>>

如果您想保留原始类中包含的信息(为了更好地解释内容(尽管这在内存中有花销),则可以将分组转换为
Dictionary<int, List<yourSourceClass>>

var dictPerCompany = 
    sourceList.GroupBy(src => src.companyId)
              .ToDictionary(gr => gr.Key, gr => gr.Select(val => val).ToList());

甚至没有必要转换为字典。选择的类型取决于目的地。

答案 1 :(得分:0)

您可以尝试这样的事情:

var dict = list.GroupBy(x=>x.CompanyId)
               .Select(gr => 
               {
                   CompanyId = gr.Key,
                   Users = gr.Select(y=>y.UserId).ToList()
               })
               .ToDictionary(x=>x.CompanyId, x=>x.Users);

其中list是您提到的列表对象。