按不同方向的日期排序

Order by date in different directions

我有一个预订系统和一个显示用户预订的页面 - 过去和未来。

我想先对未来的预订进行排序,然后将下一个会话排在顶部 (asc),然后是过去的预订,从最近的会话开始 (desc)。

我目前有这个:

from sess in Sessions
    orderby sess.SessionDate < DateTime.Now.Date, sess.SessionDate
    select sess

但这两个集合都是按升序排列的。在第一个 order by 子句之后有条件地排序的任何方法?

我也考虑过使用 IQueryable<T>.Concat。那是要走的路吗?我假设这会导致某种联合,但我能保证它会保持两组的排序顺序吗?

例如结果: 会话

2015-03-01 - some class
2015-03-15 - a different class
2015-04-10 - also a class
(the split between past and future sessions)
2014-12-22 - some tutorial
2014-11-15 - some sort of class
2014-10-08 - some other class

如何将其拆分为两个单独的查询,第一个查询的未来会话按会话日期升序排列。将它们添加到列表中。然后是另一个查询,其中过去的会话按会话日期降序排列。将它们添加到同一个列表中。

我看不出任何解决这个问题的机会,我没有任何混乱。

您可以将三元运算符与 DateDiff 函数结合用于第二个排序依据。这将允许您交换 DateTime.Now 和您的 SessionDate

let isSessionDateLessThanNow = sess.SessionDate < DateTime.Now
orderby isSessionDateLessThanNow, 
        isSessionDateLessThanNow ? 
           SqlFunctions.DateDiff("s", sess.SessionDate, DateTime.Now) :
           SqlFunctions.DateDiff("s", DateTime.Now, sess.SessionDate)