Как сгруппировать по вложенному свойству Nested property (часть II) - PullRequest
0 голосов
/ 21 ноября 2010

В предыдущем посте (http://bit.ly/bbIthV) я спросил, как сгруппировать список людей по их вложенному адресу Address.State, когда адрес может быть нулевым.

Джон Скит дал прекрасный ответ на мой вопрос:

//Create a dummy replacement for when a person has no addresses Address dummyAddress = new Address { State = "" }; people.GroupBy(p => (p.Addresses.GetFirstOrDefault() ?? dummyAddress).State);

Но, увидев результаты, я вижу, что не задавал правильный вопрос.

Если у меня есть 6 человек, каждый из которых живет по n адресам, вышеупомянутые получат только 6 групп ... тогда как вместо этого я должен был бы получить группу людей, сгруппированных по ключевому состоянию, которое можно найти по: *

var distinctAddresses = people.SelectMany(p=>p.Addresses).City).Distint();

Я думаю, что ответом будет какое-то групповое присоединение, но я не продвинулся очень далеко ...

//Back where I started: var y = addresses.GroupJoin(persons,a => a.State, p => p.Addresses.FirstOrDefault(), (a,p)=> p); //Doesn't compile... var y = addresses.GroupJoin(persons,a => a, p => p.Addresses, (a,p)=> p);

У кого-нибудь есть предложения, как поступить?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 21 ноября 2010

Как насчет этого?

var q =
    (from p in people
     from a in p.Addresses
     group p by a.State ?? "")
    .ToDictionary(x => x.Key, x => x.Distinct())
0 голосов
/ 21 ноября 2010

Возможно, проще использовать синтаксис запроса:

var q = from p in People
        group p by p.Address.State into g
        select g;
...