Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以最少的查询数从数据库中获取层次结构树_C#_Sql_Tree - Fatal编程技术网

C# 以最少的查询数从数据库中获取层次结构树

C# 以最少的查询数从数据库中获取层次结构树,c#,sql,tree,C#,Sql,Tree,现在,我有以下表格模式: Node_Id(INT)| NodeName(nvarchar(40))| ParentNode(INT,FK) 我想从该结构中检索层次结构树:结构与此结构相似:{NodeId,NodeName,IEnumerable Children,bool haschldren} 我认为这个问题有两种解决方案:第一种是树遍历。我的意思是加载根节点(其中parent=null),然后为每个节点加载它的子节点,并递归地为这些节点执行此操作。但每个子负载都会导致对DB的额外查询,这会影

现在,我有以下表格模式:

Node_Id(INT)| NodeName(nvarchar(40))| ParentNode(INT,FK)

我想从该结构中检索层次结构树:结构与此结构相似:
{NodeId,NodeName,IEnumerable Children,bool haschldren}

我认为这个问题有两种解决方案:第一种是树遍历。我的意思是加载根节点(其中parent=null),然后为每个节点加载它的子节点,并递归地为这些节点执行此操作。但每个子负载都会导致对DB的额外查询,这会影响性能

我看到的另一个选项是从数据库(与表模式相同)加载平面结构,然后从中构建层次结构。这是对应用服务器性能的影响


我想知道是否还有其他解决方案?

如果不需要立即显示所有树子节点,可以基于指定的父节点加载,然后在用户展开树子节点时按需加载。这将减轻应用程序和数据库服务器的负载。

除了您已经提到的解决方案之外,您还可以在oracle sql中使用connect by/start with


有关更多信息,请参阅此链接:

是的,我知道延迟加载,这是一个选项。然而,如果可能的话,我想避免它,并立即加载树-它几乎有15000个节点-不够大。