2009-10-29 18 views
3

我有这两类LINQ:给定对象的列表,与孩子建立一个字典作为键和父对象的对象作为价值

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

挑战:鉴于公司的名单(即List<Company> Companies)。使用密钥Person创建dictionary,并将其作为值归属于Company。请注意,一个Person可以属于多个Companies

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

+0

一个人可以属于多个公司吗? – 2009-10-29 04:03:11

+0

当然可以。他可以 – Graviton 2009-10-29 04:04:03

回答

7

我想这会做到这一点:

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 to SQL(等),那么它意味着当然可以在数据库完成暴力破解。

相关问题