我使用LINQ从存储过程调用中检索到的对象集合中构建对象的树形结构。Linq将元素从一个集合中移除到另一个集合中
我想知道,如果
一)有什么办法可以去除从一个集合的元素到一个新的集合
b)如居然有任何一点性能明智的在做这个
我的代码看起来是像这样:
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
所以基本上;有没有办法做选择语句,我真的从initialCollection
删除元素,因为我选择它们。这个想法是在递归构建我的树时减少搜索元素的数量。这样做实际上是否会有任何好处,或者是从一个集合中删除元素并添加到另一个集合的开销太大?
辉煌,非常干净的解决方案。干杯。 – 2009-08-21 13:55:31