加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – LINQ:给定一个对象列表,创建一个以子对象为键,父对象为值

发布时间:2020-12-16 01:32:53 所属栏目:百科 来源:网络整理
导读:我有这两个班 public class Person{}public class Company{ public ListPerson Persons{get;set;}} 挑战:给出公司名单(即List Company Companies).创建一个包含关键字Person的字典,以及他所属的公司列表作为值.请注意,一个人可以属于多个公司. 我只对LINQ解
我有这两个班

public class Person
{
}
public class Company
{
 public List<Person> Persons
{get;set;}
}

挑战:给出公司名单(即List< Company> Companies).创建一个包含关键字Person的字典,以及他所属的公司列表作为值.请注意,一个人可以属于多个公司.

我只对LINQ解决方案感兴趣;蛮力搜索和收集不是我想要的.

解决方法

我想这会做到:

var dictionary = (from company in companies
                  from person in company.Persons
                  group company by person).ToDictionary(x => x.Key,x => x.ToList());

或者,使用Lookup代替:

var lookup = company.SelectMany(company => company.Persons,(company,person) => new { company,person })
                    .ToLookup(x => x.person,x => x.company)
                    .ToDictionary(x=>x.Key,x => x.ToList()) ;

请注意,这两者都是“强力搜索和收集” – 只是该暴力强制的代码是在LINQ而不是在C#中.如果您正在使用LINQ to SQL(等),那么这意味着可以在数据库中完成强制执行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读