我有一个自我参照类别表,如你所见:
我想解析此表以找出每个类别的树级别。例如,如果根节点级别为0,则CPU和硬盘驱动器以及VGA和RAM处于级别1,依此类推。我该怎么处理?
我创建了一个字典来放置每个类别ID及其级别:
Dictionary<int, int> dic = new Dictionary<int, int>();
Key是CategoryId,Value是Level。 请帮帮我怎么填字典?
答案 0 :(得分:2)
您无法在单个LINQ查询中轻松完成此操作。你应该使用递归。在C#中编写递归函数或在数据库中使用递归CTE。
对于C#解决方案:
IEnumerable<KeyValuePair<int, int>> GetChildren(int id, int childLevel)
{
foreach (var row in rows.Where(row => row.ParentID == id && row.ID != id))
{
yield return new KeyValuePair<int, int>(row.ID, childLevel);
foreach (var x in GetChildren(row.ID, childLevel + 1))
{
yield return x;
}
}
}
请致电如下:
GetChildren(0, 0);
答案 1 :(得分:1)
我建议您使用with关键字使用递归公用表表达式。请查看this article on MSDN和我自己的问题here。
答案 2 :(得分:0)
我同意以前的答案;你不能做一个神奇的查询,将给你树级。像这样的层次结构通常更好地使用嵌套集结构而不是父指针:
http://en.wikipedia.org/wiki/Nested_set_model
本文向您展示了使用嵌套集数据的一些常见查询:
http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/