В предыдущем посте (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);
У кого-нибудь есть предложения, как поступить?
Большое спасибо!