我有这两门课
public class Person
{
}
public class Company
{
public List<Person> Persons
{get;set;}
}
挑战:给出一份公司名单(即List<Company> Companies
)。使用键dictionary
创建一个Person
,并将其所属的Company
列表作为值。注意,一个Person
可以属于多个Companies
。
我只对LINQ解决方案感兴趣;蛮力搜索和收集不是我想要的。
发布于 2009-10-28 20:09:30
我想这样就行了:
var dictionary = (from company in companies
from person in company.Persons
group company by person).ToDictionary(x => x.Key,
x => x.ToList());
或者,使用查找代替:
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 (etc),那么这意味着强制执行可以在数据库中完成。
https://stackoverflow.com/questions/1641537
复制