我有一个类似的清单

| column1 | column2 |
|    1    |   72    |
|    2    |   30    |
|    3    |   27    |
|    3    |   38    |
|    4    |   72    |


如您所见,该列表已经在column1上进行了排序,我的目标是仅在equals列1上对第二列执行OrderByDescending。

| column1 | column2 |
|    1    |   72    |
|    2    |   30    |
|    3    |   38    |
|    3    |   27    |
|    4    |   72    |


我不能重新运行第一个OrderBy(这很难解释,我们不在乎,我只是不能:D)所以忘了
list.OrderBy(e => e.column1).ThenByDescending(e => e.column2)

实际上,如果我不必执行.ThenByDescending(e => e.column2)就可以简单地执行.OrderBy(也许我可以运行不会更改排序的“空” OrderBy),我不会有任何问题?能够做ThenByDescending吗?)

最佳答案

list.GroupBy(i => i.column1).SelectMany(i => i.OrderByDescending(g => g.column2))


将与许多提供程序一起使用,但有些可能无法保留GroupBy中的顺序。在这种情况下:

list.AsEnumerable().GroupBy(i => i.column1).SelectMany(i => i.OrderByDescending(g => g.column2))


通过将操作强制进入内存(由GroupBy保留顺序)将起作用,但缺点是所有后续操作都在内存中而不是在DB等上完成。

关于c# - LINQ OrderBy仅在第二处,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35310801/

10-13 03:16