2009-10-29 50 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(等),那麼它意味着當然可以在數據庫完成暴力破解。

相關問題