我有一個自我指涉類別表,你看:
按樹級別解析分層自聯接表?
我想分析該表中找出樹形層級爲每個類別。例如,如果根節點級別爲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