我有一张这样的桌子
ID Title Parentid
1 Level1 0
2 Level2 1
3 Level3 2
4 Level4 1
我希望根据parentid,Id关系输出层次结构模型
我能够实现像
level1
/\
level2 level4.
这里我没有达到3级。 但是我想要使用c#在第一个例子中显示的ouptut。
答案 0 :(得分:1)
(未经测试)尝试:
;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
答案 1 :(得分:0)
所有父母都是在孩子面前定义的吗?
如果是这样,你可以使用字典(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 =&gt;级别1
1 =&gt; level2,level4
2 =&gt;级别3
如果父ID不能保证在子ID之前,那么你需要添加一些调整以允许孤儿,然后添加然后在最后处理它们。
希望这有帮助,
艾伦。
答案 2 :(得分:0)
递归应该使用公用表表达式查询(CTE)在SQL Server内部完成。一个查询应该能够给出结果和“级别”,然后可以在C#中解析,而无需在代码中进行递归。
这是一个带例子的链接:(马克的例子也适用)