我需要将层次结构循环到根目录。 这是我的表格列
我想你明白了这个问题。具有ParentId NULL的项是根。
实施例
可以使用linq完成吗?或者使用sql查询更好。
答案 0 :(得分:2)
Sql Server上的这样的东西可能是解决方案:
4例如果我们想要递归地找到Child1的根,我们可以使用
WITH n(ID, Description) AS
(SELECT ID, Description
FROM yourTable
WHERE Description = 'Child1'
UNION ALL
SELECT nplus1.ID, nplus1.Description
FROM youTable as nplus1, n
WHERE n.ID = nplus1.ParentID)
SELECT name FROM n
查看MSDN 4 WITH 关键字
Oracle服务器上的相同解决方案将使用
SELECT Description
FROM yourTable
START WITH name = 'Child1'
CONNECT BY PRIOR ID = ParentID
答案 1 :(得分:0)
如果可以更改(反转)树结构以使节点包含其子节点而不是引用其父节点,如下所示:
class Node
{
public Guid Id { get; set; }
public IEnumerable<Node> Children { get; set; }
public string Description { get; set; }
}
然后很容易将树“扁平”成IEnumerable,其扩展名如下:
public static IEnumerable<T> FlattenedTree<T>(this T node, Func<T, IEnumerable<T>> getter)
{
yield return node;
var children = getter(node);
if(children != null)
{
foreach (T child in children)
{
foreach (T relative in FlattenedTree(child, getter))
{
yield return relative;
}
}
}
}
你可以在这样的linq中使用你的树:
var descriptions = MyTreeStructure.FlattenedTree(x => x.Children).Select(x => x.Description);