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不是要求。