我有一个自我关联的实体来模拟分层树。每个实体都有0个或1个父实体,并且可以有许多子实体。
那就是说,我试图让所有实体从任意节点(子树)开始。
我的尝试:
// Get root node
var rootNode = DB.HierarchyNodeSet.Where(x => x.Id == inputNodeId).SingleOrDefault();
// Recursively get all children from this node
IEnumerable<HierarchyNode> subTreeNodes = RecursiveGetNodeChildren(rootNode);
RecursiveGetNodeChildren()
编码如下:
private IEnumerable<HierarchyNode> RecursiveGetNodeChildren(HierarchyNode n)
{
List<HierarchyNode> lsOut = new List<HierarchyNode>();
lsOut.Add(n);
if (n.Children.Any())
foreach (var child in n.Children)
lsOut.AddRange(RecursiveGetNodeChildren(child));
return lsOut;
}
这有效,但速度太慢(我有~10k节点)。
要获得根节点,我花了5-7秒,这是我可以接受的,但递归例程需要超过30秒。
我认为我从错误的角度来看问题。你们中的任何人都可以建议(如果有的话)以更快的方式获得分层数据的最佳实践吗?
提前谢谢
F。