C# 按日期向不同方向订购

C# 按日期向不同方向订购,c#,sql-server,linq,sql-order-by,C#,Sql Server,Linq,Sql Order By,我有一个预订系统和一个页面显示用户的预订-过去和未来 我想先订购未来的预订,再订购顶部的下一个会话(asc),然后订购过去的预订,从最新会话(desc)开始 我目前有: from sess in Sessions orderby sess.SessionDate < DateTime.Now.Date, sess.SessionDate select sess 把它分成两个独立的查询怎么样,第一个是未来会话的顺序,按会话日期升序。将它们添加到列表中。然后是另一个查询,其中

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

我想先订购未来的预订,再订购顶部的下一个会话(asc),然后订购过去的预订,从最新会话(desc)开始

我目前有:

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

把它分成两个独立的查询怎么样,第一个是未来会话的顺序,按会话日期升序。将它们添加到列表中。然后是另一个查询,其中过去的会话按会话日期降序排列。将它们添加到同一列表中


我看不出有任何机会解决这个一次查询而不造成任何混乱。

您可以使用三元运算符与二阶by函数组合。这将允许您交换
日期时间。现在
和您的
会话日期

let isSessionDateLessThanNow = sess.SessionDate < DateTime.Now
orderby isSessionDateLessThanNow, 
        isSessionDateLessThanNow ? 
           SqlFunctions.DateDiff("s", sess.SessionDate, DateTime.Now) :
           SqlFunctions.DateDiff("s", DateTime.Now, sess.SessionDate)
让IsSessionDatelessthanow=sess.SessionDate
您能详细介绍一下您的答案吗。我看着它,仍然不知道“刚刚发生了什么”。我只知道它看起来棒极了。@granadaCoder-第一个
orderby
将在未来日期计算为
false
,因此它们将放在过去日期之前。第二个
orderby
只是按最接近的
DateTime进行排序。现在
,但您需要交换边界处的参数,否则您将开始得到负数。我现在“看到了”。谢谢
let isSessionDateLessThanNow = sess.SessionDate < DateTime.Now
orderby isSessionDateLessThanNow, 
        isSessionDateLessThanNow ? 
           SqlFunctions.DateDiff("s", sess.SessionDate, DateTime.Now) :
           SqlFunctions.DateDiff("s", DateTime.Now, sess.SessionDate)