2010-10-29 26 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