递归函数显示层次显示使用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#。
(未测试)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