2010-10-29 57 views
1

我有一个自我指涉类别表,你看:
alt text按树级别解析分层自联接表?

我想分析该表中找出树形层级为每个类别。例如,如果根节点级别为0,则CPU和硬盘驱动器以及VGA和RAM处于级别1,依此类推。我该如何处理?
我创建了一个字典把每个类别ID和级别:

Dictionary<int, int> dic = new Dictionary<int, int>(); 

关键是类别编号和值是水平的。 请帮助我如何填写词典?

+1

如果这样的层次往往更好地与一组嵌套的结构,而不是一个父指针服您正在使用SQL 2008,您可以更改自引用表以使用适用于此类层次结构的新HierarchyID数据类型。否则,你需要使用像CesarGon所说的CTE ......除非你想在C#代码中进行解析。 – Dismissile 2010-10-29 18:16:38

回答

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); 
+0

最好是用C#代码为我做! – mahdiahmadirad 2010-10-29 19:47:07