2010-11-21 11 views
0

Önceki bir yayında (http://bit.ly/bbIthV), Adres listesi boşken Kişiler listesinin iç içe geçmiş Address.State ile nasıl Gruplandırılacağını sordum.Yuvalanmış bir özelliğin Nested özelliğine göre gruplandırma (bölüm II)

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

Ama sonuçları görmeye, ben doğru quesion sormuyordum görüyoruz:

Jon Skeet

Sorumun mükemmel bir cevap verdi.

Her biri n adresinde yaşayan 6 kişiyse, yukarıdakiler 6 gruba sahip olacak ... oysa bunun yerine anahtar grup tarafından gruplanan bir grup kişi almalıyım:

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

Cevabın bir tür GroupJoin içerecektir düşünüyorum, ama

//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);

herkes atılacak adımlar konusunda bir öneri var mı ... çok uzak kazanılmış değil?

Çok teşekkür ederim!

+0

Biraz kafam karıştı. Örnek giriş, çıkış sağlayabilirseniz harika olurdu. – Ani

cevap

0

Bu sorgu sözdizimi kullanılarak basit olabilir: Bu nasıl hakkında

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

?

var q = 
    (from p in people 
    from a in p.Addresses 
    group p by a.State ?? "") 
    .ToDictionary(x => x.Key, x => x.Distinct()) 
İlgili konular