按不同方向的日期排序
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)
我有一个预订系统和一个显示用户预订的页面 - 过去和未来。
我想先对未来的预订进行排序,然后将下一个会话排在顶部 (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)