按日期在不同方向排序

时间:2015-01-29 22:33:49

标签: c# sql-server linq sql-order-by

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

我想先订购未来的预订,然后在下一个会议的顶部订购(asc),然后通过最新的会议(desc)开始预订。

我目前有这个:

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

但是这会以asc顺序给出两组。在第一个order by子句之后有条件排序的任何方法?

我还考虑过使用IQueryable<T>.Concat。这会是要走的路吗?我认为这会产生某种联盟,但我可以保证它会保留两组的排序顺序吗?

e.g。结果: 会话

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

2 个答案:

答案 0 :(得分:3)

您可以使用三元运算符和DateDiff函数组合作为二阶。这样您就可以交换DateTime.NowSessionDate

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

答案 1 :(得分:0)

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

我没有任何机会在没有任何混乱的情况下解决这个问题。