我是Linq的新手。我有一个包含字段的对象列表
userId, companyId
我需要组装一个字典:
Dictionary Key= companyId
Dictionary Value = List(UserId that belong to companyId).
我可以使用Linq实现此功能吗?如果可以,可以通过哪种方式实现?
答案 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
是您提到的列表对象。