我有这两个班
public class Person
{
}
public class Company
{
public List<Person> Persons
{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
挑战:给出公司名单(即List<Company> Companies).dictionary使用密钥创建一个Person,并将Company他所属的列表作为值.请注意,一个人Person 可以属于多个Companies.
我只对LINQ解决方案感兴趣; 蛮力搜索和收集不是我想要的.
我想这会做到:
var dictionary = (from company in companies
from person in company.Persons
group company by person).ToDictionary(x => x.Key,
x => x.ToList());
Run Code Online (Sandbox Code Playgroud)
或者,使用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()) ;
Run Code Online (Sandbox Code Playgroud)
请注意,这两者都是 "强力搜索和收集" - 只是该暴力强制的代码是在LINQ而不是在C#中.如果您正在使用LINQ to SQL(等),那么这意味着可以在数据库中完成强制执行.
| 归档时间: |
|
| 查看次数: |
1398 次 |
| 最近记录: |