我有这两个班 public class Person{}public class Company{ public ListPerson Persons{get;set;}} 挑战:给出公司名单(即List Company Companies).创建一个包含关键字Person的字典,以及他所属的公司列表作为值.请注
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(等),那么这意味着可以在数据库中完成强制执行.