2010-11-21 2 views
0

이전 게시물 (http://bit.ly/bbIthV)에서 Address가 null 일 때 중첩 된 Address.State에 의해 Person 목록을 그룹화하는 방법을 물었습니다.중첩 된 속성의 중첩 된 속성 (파트 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);

그러나 결과를보고, 나는 오른쪽 으론 요청되지 않았 음을 참조하십시오

Jon Skeet

내 질문에 완벽한 대답을했다.

나는 각각 6 명씩 n 개의 주소로 살고 있는데, 위의 경우 6 명만받는 반면 ... 나는 핵심 인물로 그룹을 구성해야한다.

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

나는 대답은 어떤 종류의 GroupJoin을 포함 할 것이다 생각하지만, 나는

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

은 아무도 진행 방법에 대한 제안이 있습니까 ... 아주 멀리 못 했어?

대단히 감사합니다!

+0

약간 혼란 스럽습니다. 샘플 입력과 출력을 제공 할 수 있다면 좋을 것입니다. – Ani

답변

0

이 쿼리 구문을 사용하여 간단 할 수 있습니다이 방법에 대해

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())