2016-12-22 13 views
0

親リスト(親)と親リストを持つ子リストを持つ子リスト(子)の2つのリストがあります。親リストと子リストを1つのネストされた親リストに結合

List<Parent> parents 
List<Child> children 

私は、2つのリストを、それぞれの親オブジェクトが子リストを持つ1つの親リストに結合しようとしています。私は現在、親リストをループしていて、parentIdに基づいて各親オブジェクト内にChildrenリストを設定していますが、LINQを使用してこれを行うより速い方法があるかどうかは疑問でした。

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

お勧めはありますか?

答えて

2

あなたはGroupByと組み合わせJoinを、使用することができます。

GroupJoinと1文で
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(); 
} 

または両方:

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

素晴らしい、最初の1つは完璧に働いた – hines

1

パフォーマンスの観点からは、あなたのforeachのは何も問題はありません。

あなたのコードが十分に読みやすい場合は、あなたのコードを魅力的にするためのポイントはありません。

コレクションが非常に大きい場合は、パフォーマンスの観点から、最初に親IDで子をグループ化し、親IDでグループをソートし、それらを並べ替えられた親に追加すると最も効率的です。

関連する問題