如何使用Linq进行多级父子排序?

时间:2010-03-28 20:10:17

标签: c# linq linq-to-sql sorting

如果我有一个如下所示的表结构,如何使用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  

3 个答案:

答案 0 :(得分:7)

使用邻接列表执行分层搜索/排序并不容易,尤其是在Linq中。

不是在这里写一大段代码来做这件事,我会把你推荐给已经做过的人:

Linq AsHierarchy() Extension Method

这会将邻接列表转换为实际的树结构,然后以分层方式轻松显示/搜索/排序。

答案 1 :(得分: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

答案 2 :(得分:0)

我打赌

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

就足够了,Linq将完成其余的工作 只需要指定状态LoadWith语句