【发布时间】:2016-02-10 09:07:23
【问题描述】:
我有一个类似的列表
| column1 | column2 |
| 1 | 72 |
| 2 | 30 |
| 3 | 27 |
| 3 | 38 |
| 4 | 72 |
如您所见,列表已在 column1 上排序,我的目标是仅在等于列 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?)
【问题讨论】:
-
什么?在
colum2排序之前,您不能在column1上订购吗?我不知道我是否理解这一点,但是我没有看到任何其他解决方案。无论如何,您不会“重新运行”任何东西,这两个语句会在需要时延迟执行。 -
如果你不能做一个明显的解决方案,那么你必须努力......复制新列表中的所有column2值并对该列表进行排序并合并新列表和旧列表
-
你应该解释为什么这不是一个选项,因为它正是要走的路。
-
好吧,我在这里尽量简单,但我要处理的对象不是包含 2 列的列表,而是包含对象的查询 (
IQueryable)。该查询来自一个基于参数处理排序的通用函数。所以当我面前有我的查询时(在调用函数之后),我不知道它在哪一列上排序,我只需要管理第二次排序。 -
好吧,我假设我可以查看发送给函数以重新运行第一个 OrderBy 的参数,我想避免这个解决方案,但似乎我必须这样做方式