2013-11-26 4 views
0

나는 S { T: a; IEnumerable<U> : b}과 함께 IEnumerable<S>을 가지고 있는데, 이것과 IGrouping<T, U>으로 그룹화하고 싶다. 각 키 a는 그 키와 동일한 S에있는 모든 요소 U와 연관된다. . (실제로는 복잡한 것처럼 들리지만 실제로 머리 속에서 수행하고 싶은 작업을 상상해 보면 꽤 명확하고 겉으로는 직설적입니다.) 올바른 방법은 무엇입니까? 내가 현재 할 것은GroupMany equivalent

ienum.SelectMany(i => i.b.Select(b => new { i.a, b })) 
    .GroupBy(i => i.a, i => i.b); 

하지만 난 정말 내가 그 중 하나 클리어하고 읽을 수있는 방법 모양이나 형태, 그리고 모든 DRY를 찾을 말할 수 없습니다. 확실하게, 더 좋은 방법이 있어야합니까?

편집 : 의견에서 a, b 및 i는 다소 독창적이지는 않습니다. 그럼 좀 더 구체적으로 만들어 봅시다. S이 이제 Office { Manager manager, IEnumerable<Employee> employees}이라고합시다. 그것이 질문을 던져줍니다. 모든 관리자의 IGrouping을 직원에게 제공하십시오. 그게 동등한 진술을 만든다

offices.SelectMany(office => office.employees.Select(employee => new { office.manager, employee })) 
     .GroupBy(pair => pair.manager, pair => i.employee); 

나는 그것이 도움이되는지 잘 모르겠다. 나에게 그것은 더 읽을 수없는 것을 읽는다. 그래서, 여전히 같은 질문입니다. 어떻게 이것을 더 읽기 쉽게 만들 수 있습니까?

+0

적절한 변수 이름을 사용하면 더 쉽게 읽을 수 있습니다. 'i','b' 및'a'는 그다지 서술 적이 지 않습니다. – Stijn

+0

질문을 수정하겠습니다. – Martijn

답변

1

LINQ는 이와 같이 간단하게 작동합니다. 실제적으로 어떤 식 으로든 SelectManyGroupBy을 사용하지 않고 작동하게하는 다른 방법은 없습니다.

많은 LINQ 쿼리가 여러 번 복잡해졌고 이해하기가 어려웠으므로 실제로 기뻐해야합니다. 나에게 그 쿼리는 여전히 간단하고 의도를 명확하게 표현합니다. 그리고 실제로는 각 단계를 따르기가 쉽습니다.