2016-12-22 1 views
0

상위 목록 (상위)과 하위 목록 (하위)에 상위 목록이있는 목록이 두 개 있습니다.상위 및 하위 목록을 하나의 중첩 된 상위 목록으로 결합

List<Parent> parents 
List<Child> children 

두 개의 목록을 하나의 부모 목록으로 결합하려고합니다. 각 부모 개체는 자식 목록이 있습니다. 현재 부모 목록을 반복하고있는 부모 목록을 기반으로 각 부모 개체 내에서 자식 목록을 채우고 있지만 LINQ를 사용하여이 작업을 수행하는 더 빠른 방법이 있는지 궁금 해서요.

foreach (var parent in parents) 
{ 
    parent.Children = children.Where(c=>c.ParentId == parent.Id).ToList(); 
} 

의견이 있으십니까? GroupJoin 하나의 문에

var parentChildrenQry = 
    from parent in parents 
    join child in children on parent.Id equals child.ParentId 
    group child by parent; 

foreach(var grp in parentChildrenQry) { 
    grp.Key.Children = grp.ToList(); 
} 

또는 두 :

답변

2

당신은 GroupBy과 결합 Join을 사용할 수 있습니다

var parentChildrenQry = 
    parents.GroupJoin(children, parent.Id, child.ParentId, new { (parent, childGrp) => new { Parent = parent, Children = childGrp.ToList() }); 

foreach(var grp in parentChildrenQry) { 
    grp.Parent.Children = grp.Children; 
} 
+0

멋진 첫 번째 작품은 완벽하게 작동했습니다. – hines

1

을 성능의 관점에서 아무 문제는 foreach는 함께 없다 .

코드가 충분히 읽기 쉽다면 코드를 작성하고 멋지게 만들 수 없습니다.

컬렉션이 매우 큰 경우 퍼포먼스 측면에서 볼 때 처음에는 상위 ID로 그룹화하고 상위 ID로 그룹을 정렬 한 다음 정렬 된 상위 그룹에 그룹을 추가하는 것이 가장 효율적일 수 있습니다.

관련 문제