递归函数显示层次显示使用c#

本文关键字:显示 层次 递归函数 | 更新日期: 2023-09-27 18:12:06

我有一个这样的表

ID               Title                    Parentid
1                Level1                    0
2                Level2                    1
3                Level3                    2 
4                Level4                    1

我希望根据parentid,Id关系在层次模型中输出

  • 使
  • ->二级->三级
  • -> Level4。

我能做到像

                      level1
                        /'
                  level2  level4. 

这里我没有得到第3级。但我希望输出如第一个示例所示,使用c#。

递归函数显示层次显示使用c#

(未测试)Try:

;with RCTE as
(select id, title full_path from MyTable where ParentID = 0
 union all
 select m.id, r.full_path & '->' & m.title full_path
 from MyTable m, RCTE r
 where m.parentid = r.id)
select full_path from RCTE

所有父类都在子类之前定义吗?

如果是这样,可以使用Dictionary(int, List(Item))(对不起,括号,似乎不能让尖括号工作),其中,例如,

public class Item {
    public int Id { get; set;}
    public int ParentId { get; set;}
    public string Title {get; set;}
}

IDictionary<int, List<Item>> CreateTree(IEnumerable<Item> nodeList){
    var ret = new Dictionary<int, List<Item>>();
    foreach (var item in items) {
            if (!ret.ContainsKey(item.ParentId)) {
                ret.Add(item.ParentId, new List<Item>());
            }
            ret[item.ParentId].Add(item);
        }
    return ret;
}

这将给出(对于上述数据)

0 => level1

1 => level2, level4

2 => level3

如果不能保证父id在子id之前,那么您需要添加一些调整以允许孤儿,然后在最后添加并处理它们。

希望有帮助,

Alan。

递归应该在SQL Server内部使用公共表表达式查询(CTE)完成。一个查询应该能够给出结果和"级别",然后可以在c#中进行解析,而不需要在代码中递归。

下面是一个带有示例的链接:(Mark的示例也适用)

http://msdn.microsoft.com/en-us/library/ms186243.aspx