我正在使用Entity Framework(版本6)映射到递归层次结构,并且映射很好。
我的问题是我想递归地获取层次结构中特定节点的所有子节点。
我可以使用Linq轻松获得子节点:
var recursiveList = db.ProcessHierarchyItems
.Where(x => x.id == id)
.SelectMany(x => x.Children);
有人知道一个干净的实现,它将递归地得到所有孩子吗?
尽管可以在此处使用递归方法,但是可以使用显式堆栈遍历此树结构,以避免使用堆栈空间,这对于大型树结构而言并不总是足够的。这种方法作为迭代器块也非常好,并且与常规方法相比,迭代器在迭代时的开销要低得多,因此它的性能也会更好:
public static IEnumerable<T> Traverse<T>(this IEnumerable<T> items,
Func<T, IEnumerable<T>> childSelector)
{
var stack = new Stack<T>(items);
while(stack.Any())
{
var next = stack.Pop();
yield return next;
foreach(var child in childSelector(next))
stack.Push(child);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句