2010-03-28 37 views
4

我該怎麼辦了多層次的父子排序使用LINQ如果我有類似下面的表結構:如何使用Linq進行多級親子排序?

 
[Table: Sections] 
Id Seq Name  ParentSectionId 
1 1  TOP   NULL 
2 1  AAAA  1 
3 2  SSSS  1 
4 3  DDDD  1 
5 1  SectionA1 2 
6 2  SectionA2 2 
7 1  SectionS1 3 
8 3  ASummary 2 

預期的排序結果:

 
TOP 
    AAAA 
    SectionA1 
    SectionA2 
    ASummary 
    SSSS 
    SectionS1 
    DDDD 

回答

7

執行分層搜索/排序鄰接列表並不是一件容易的事情,特別是在Linq中。

而不是寫在這裏的代碼大塊要做到這一點,我會向您推薦別人誰已經做到了:

Linq AsHierarchy() Extension Method

這將鄰接錶轉換成實際的樹形結構,然後便於以分層方式顯示/搜索/排序。

0

我認爲這樣做。這是未經測試,所以讓我知道:

from section in db.Sections 
group section by section.ParentSectionId into childGroup 
orderby childGroup.Key 
from childSection in childGroup.OrderBy(child => child.Seq) 
select childSection 
+0

這隻會工作如果層次結構已按排序順序排序,則不太可能。圖片[1]和[5]在根,與各自的孩子[8]和[2]; [2]的孩子會出現在[8]的孩子面前,這是錯誤的。 – Aaronaught 2010-03-28 20:43:27

+0

似乎將SectionS1放在列表的最後,ASummary倒數第二。 – 2010-03-28 20:47:33

0

我敢打賭

from section in db.Sections 
where section.sec=0 
orderby section.Name 

就足以和LINQ將完成剩下的 只有你有指定狀態LoadWith聲明