私はLINQを使用して、ストアドプロシージャコールから取得したオブジェクトのコレクションからオブジェクトのツリー構造を構築しています。Linqはあるコレクションから別のコレクションに要素を削除します
私が実際に存在する場合、この
私のコードを実行中に賢明な任意のポイントのパフォーマンスが何かに見える)
a)の新しいコレクションに
Bを1つのコレクションから要素を削除するにはどのような方法があるかどうかを知りたいですこのように:
class MyEntity
{
int ID { get; set; }
int? ParentID { get; set; }
string Name { get; set; }
List<MyEntity> children = new List<MyEntity>();
List<MyEntity> Children { get { return children; } }
}
List<MyEntity> initialCollection = //get stuff from DB
List<MyEntity> rootElements = (from e in initialCollection
where e.ParentID == null
select e).ToList();
List<MyEntity> childElements = (from e in initialCollection
where e.ParentID != null
select e).ToList();
foreach(MyElement e in rootElements)
e.Children.AddRange((from c in childElements
where c.ParentID == e.ID
select c).ToList());
//do some more recursion
だから基本的に; select文を実行する方法があります。実際には、要素を選択するにあたり、それらの要素を実際にはinitialCollection
から削除します。アイデアは、再帰的にツリーを構築しながら検索する要素の数を減らすことです。実際にこれを行うことで何か有益でしょうか、あるいはあるコレクションから要素を取り除き、別のコレクションに要素を追加するのにかかるオーバーヘッドですか?
ブリリアントは、本当に素晴らしいクリーンソリューションです。乾杯。 –