我有以下值的集合:LINQ - 排序多个列
ID | OtherId
1 0
2 0
3 1
3 2
3 3
4 1
4 2
4 3
5 0
6 0
有没有办法让在使用LINQ下面的排序方式输出?
ID | OtherId
1 0
2 0
3 1
4 1
3 2
4 2
3 3
4 3
5 0
6 0
我有以下值的集合:LINQ - 排序多个列
ID | OtherId
1 0
2 0
3 1
3 2
3 3
4 1
4 2
4 3
5 0
6 0
有没有办法让在使用LINQ下面的排序方式输出?
ID | OtherId
1 0
2 0
3 1
4 1
3 2
4 2
3 3
4 3
5 0
6 0
你需要使用的OrderBy和ThenBy:
我没有试过,但是因为你的最后2行是“乱序”您需要通过一阶(未)具体值,然后按列。这将是这样的:
var sorted = table
.Where(x => x.SomeColumn == someValue)
.OrderBy(x => x.ID != 5)
.ThenBy(x => x.ID != 6)
.ThenBy(x => x.OtherId)
.ThenBy(x => x.ID)
.ToList();
如果你不想通过具体的值进行排序,你需要做2个查询和工会:
var valueAtWhichSortingLogicChanges = 4;
var sorted = table
.Where(x => x.ID <= valueAtWhichSortingLogicChanges)
.OrderBy(x => x.OtherId)
.ThenBy(x => x.ID)
.ToList();
sorted.AddRange(table
.Where(x => x.ID > valueAtWhichSortingLogicChanges)
.OrderBy(x => x.OtherId)
.ThenBy(x => x.ID)
.ToList());
使用** **的OrderBy条款 – dmitry
我怀疑预期的结果是否是有序列表?如果是,为什么[5 0]和[6 0]不应该跟随[1 0]和[2 0]对或者它应该是第一列排序,不是吗? –
你需要解释规则是什么。就目前而言,你的问题是无法回答的,因为你没有给我们足够的信息来说明排序标准是什么。 –