2017-08-17 165 views
-2

DB记录进行排序我有DB表是这样的:如何母公司

ID Name ParentID isActive 
1  ABC NULL   true 
2  DEF 1   true 
3  GHI 1   true 
4  JKL NULL   true 
5  MNO 4   true 
6  PRS NULL   true 
7  TUV NULL   true 
8  WX 1   true 
9  YZ 4   true 
10  abc 7   true 

我得到的名单:

var projectList = connection.Where(d=>d.Active); 

当我得到这个表的清单,我想按家长ID排序。所以,排序后的列表应该是这样的:(每一行代替其父行的下面)。

  • 1是2,3-父和8

  • 4 5父和9

1|ABC 
2|DEF 
3|GHI 
**4|WX** 
5|JKL 
6|MNO 
**7|YZ** 
8|PRS 
9|TUV 
**10|abc** 

我怎样才能进行排序该列表?

+0

是你想要使用LINQ或SQL排序? – AsifAli72090

+1

您需要在列表上使用OrderBy方法。 https://msdn.microsoft.com/en-us/library/bb534966(v=vs.110).aspx –

+0

也许......'按ID排序' – scsimon

回答

0

您只需要通过区分父元素和子元素来加入结果。我希望它有帮助。

static void Main(string[] args) 
{ 
    var connection = new List<User>() 
    { 
    new User(1, "ABC", null, true), 
    new User(2, "DEF", 1, true), 
    new User(3, "GHI", 1, true), 
    new User(4, "JKL", null, true), 
    new User(5, "MNO", 4, true), 
    new User(6, "PRS", null, true), 
    new User(7, "TUV", null, true), 
    new User(8, "WX", 1, true), 
    new User(9, "YZ", 4, true), 
    new User(10, "abc", 7, true) 
    }; 


    var filtered = connection.Where(x => x.Active).OrderBy(z => z.ParentID); 
    var result = filtered.Where(p => p.ParentID == null).GroupJoin(filtered, parent => parent.ID, 
     child => child.ParentID, 
     (parent, child) => new {Child = child, Parent = parent}) 
    .Aggregate(new List<User>(), (outList, tempObj) => 
    { 
     outList.Add(tempObj.Parent); 
     outList.AddRange(tempObj.Child);  
     return outList; 
    }); 

    foreach (var item in result) 
    { 
    Console.WriteLine($"{item.ID} | {item.Name} | {item.ParentID}"); 
    } 
} 

它产生一个输出如下:

1 | ABC | 2 | DEF | 1 3 | GHI | 1 8 | WX | 1 4 | JKL | 5 | MNO | 4 9 | YZ | 4 6 | PRS | 7 | TUV | 10 | abc | 7