我有一个自我指涉类别表,你看:
按树级别解析分层自联接表?
我想分析该表中找出树形层级为每个类别。例如,如果根节点级别为0,则CPU和硬盘驱动器以及VGA和RAM处于级别1,依此类推。我该如何处理?
我创建了一个字典把每个类别ID和级别:
Dictionary<int, int> dic = new Dictionary<int, int>();
关键是类别编号和值是水平的。 请帮助我如何填写词典?
我有一个自我指涉类别表,你看:
按树级别解析分层自联接表?
我想分析该表中找出树形层级为每个类别。例如,如果根节点级别为0,则CPU和硬盘驱动器以及VGA和RAM处于级别1,依此类推。我该如何处理?
我创建了一个字典把每个类别ID和级别:
Dictionary<int, int> dic = new Dictionary<int, int>();
关键是类别编号和值是水平的。 请帮助我如何填写词典?
我建议您使用with关键字使用递归公用表达式。看看this article on MSDN和我自己的问题here。
在单个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);
最好是用C#代码为我做! – mahdiahmadirad 2010-10-29 19:47:07
我以前的答案一致;你不能做一个神奇的查询,会给你树的水平。
http://en.wikipedia.org/wiki/Nested_set_model
本文将向您展示与嵌套组数据工作的一些常见的疑问:
http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
如果这样的层次往往更好地与一组嵌套的结构,而不是一个父指针服您正在使用SQL 2008,您可以更改自引用表以使用适用于此类层次结构的新HierarchyID数据类型。否则,你需要使用像CesarGon所说的CTE ......除非你想在C#代码中进行解析。 – Dismissile 2010-10-29 18:16:38