C# 通过linq对treeview进行列表排序

C# 通过linq对treeview进行列表排序,c#,linq,sorting,C#,Linq,Sorting,我有一张单子 key ParentKey 1 Null 2 1 3 Null 4 Null 5 1 6 4 7 6 8 3 我要把它分类 key ParentKey 1 Null 2 1 5 1 3 Null 8 3 4 Null 6 4 7 6 via linq如何做到这一点? 如果结果是: key ParentKey 1 Null 2 1 5 1 3 Null 8 3 4 Null 6 4 7

我有一张单子

key ParentKey
1   Null
2   1
3   Null
4   Null
5   1
6   4
7   6
8   3
我要把它分类

key ParentKey
1   Null
2   1
5   1
3   Null
8   3
4   Null
6   4
7   6
via linq如何做到这一点?
如果结果是:

key ParentKey
1   Null
2   1
5   1
3   Null
8   3
4   Null
6   4
7   6
我可以说,如果没有将该位置的空值放入列表的逻辑,您就什么也做不了

因此,使用Linq,您可以使用以下函数对列表进行排序:

list = list.OrderBy(x => x.ParentKey).ToList();
但使用此函数的结果如下:

key ParentKey
1   Null
3   Null
4   Null
2   1
5   1
8   3
6   4
7   6

我相信您希望在这里实现的是一棵树的有序打印。
Linq帮不了你(至少是开箱即用)

我建议根据您的数据结构调整DFS实现。请参阅。

如果您有

public class MyObject{
      int Key {get;set;}
      int ? ParentKey{get;set;}
}
然后,要对该列表进行排序,请使用:

 var list = new List<MyObject>(){ new MyObject{ Key = 1 , ParentKey = null } , new MyObject{Key=2 , PatentKey = 1}  /* and so on */};

  var sortedList = list.OrderBy(o=>o.ParentKey , new MyComparer());



public class MyComparer : IComparer<MyObject>
{     
    public int Compare(MyObject o1, MyObject o2)
    {
        if (ol.HasValue && o2.HasValue)
        {
            if (ol.ParentKey.Value == o2.ParentKey.Value)
                 return 0;
            return ol.ParentKey.Value  > o2.ParentKey.Value  ? 1 : -1;
        }
        else
            return 0;

    }
}
var list=new list(){new MyObject{Key=1,ParentKey=null},new MyObject{Key=2,PatentKey=1}/*等等*/};
var sortedList=list.OrderBy(o=>o.ParentKey,new MyComparer());
公共类MyComparer:IComparer
{     
公共整数比较(MyObject o1,MyObject o2)
{
if(ol.HasValue&&o2.HasValue)
{
if(ol.ParentKey.Value==o2.ParentKey.Value)
返回0;
返回ol.ParentKey.Value>o2.ParentKey.Value?1:-1;
}
其他的
返回0;
}
}

这将生成准确的预期序列

请您解释一下您尝试了什么?我甚至不知道如何开始…我可以使用循环来完成工作,但我想通过LINQ来完成结果是什么?您可以在Compare类中进行一些更改以获得预期的结果。您尝试过吗?我最近编辑过代码。检查是否使用了上一次更改。这将不起作用…带有null的将全部位于顶部…1和2不是要求。