【发布时间】:2021-12-14 13:31:02
【问题描述】:
我有以下代码 -
var refNosToOrder = new int[9] {1,2,3,4,5,6,7,8,9}
var orderedList = lst.OrderBy(x=>x.RefNo==7)
.ThenBy(y=> refNosToOrder.Contains(y.RefNo)).ToList();
lst 是包含 int 属性的类对象列表 - RefNo :即List<SampleClass>
class SampleClass
{
public int RefNo {get;set;}
}
lst包含RefNo的所有未排序数据:
lst = 2,4,6,9,7,5,8,1,3
我想做什么-
首先,我想通过将第一个元素保留为 - 7 来订购 lst;那么对于列表的其余部分,它应该被排序为数组refNosToOrder
即我期望的最终输出是 -
7,1,2,3,4,5,6,8,9
用上面的代码-
var orderedList = lst.OrderBy(x=>x.RefNo==7)
.ThenBy(y=> refNosToOrder.Contains(y.RefNo)).ToList();
它正在给出 - 2,4,6,9,7,5,8,1,3 即此代码根本没有对列表进行排序。
【问题讨论】:
-
您的
ThenBy()不应该包含ThenBy(y => y.RefNo)之类的东西吗?看this post where I saw that -
No .. RefNo 的其余部分应按 refNosToOrder 数组 @Error404Brainnotfound 排序
-
哦,我的错,我不明白问题的那一部分!
-
如果
refNosToOrder是6, 6, 6, 6呢?你要四份原件吗?refNosToOrder是否总是(有效地)是一个数字,后跟一个没有该数字的线性序列? -
refNosToOrder 中总会有独特的元素。我不想有副本。 @JeroenMostert
标签: c# .net linq sorting .net-core