2009-10-29 4 views
3

У меня есть эти два классаLINQ: Учитывая список объектов, создать словарь с ребенком объектов в качестве ключей и родительских объектов в качестве значения

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

Задача: Учитывая список компаний (т.е. List<Company> Companies). Создайте dictionary с ключом Person, а список Company он принадлежит как значения. Обратите внимание, что один Personможет принадлежит нескольким Companies.

Меня интересует только решение LINQ; поиск и сбор грубой силы не то, что я хочу.

+0

Один человек может принадлежать нескольким компаниям? –

+0

Да, конечно. Он может – Graviton

ответ

7

Я думаю, что это будет делать:

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 (и т. Д.), То это означает, что принудительное форматирование может быть сделано в базе данных, конечно.

Смежные вопросы