如何在Linq/Sql中按当前日期订购?

如何在Linq/Sql中按当前日期订购?,sql,sql-server,linq,Sql,Sql Server,Linq,我正在从表中提取数据,但我希望使用列“ScheduledDate”对数据进行排序,当前日期在顶部(如果不是当前日期,则最接近的日期在顶部),并且在该列之后休息,即使有未来的日期 资料 预期结果: ScheduledDate 2019-08-27 11:49:57.087 2019-08-27 12:08:56.827 2019-08-27 18:30:00.000 2019-08-20 06:42:16.603 2019-08-20 06:47:33.970 2019-08-2

我正在从表中提取数据,但我希望使用列“ScheduledDate”对数据进行排序,当前日期在顶部(如果不是当前日期,则最接近的日期在顶部),并且在该列之后休息,即使有未来的日期

资料

预期结果:

ScheduledDate

2019-08-27 11:49:57.087
2019-08-27 12:08:56.827    
2019-08-27 18:30:00.000    
2019-08-20 06:42:16.603
2019-08-20 06:47:33.970
2019-08-20 11:15:36.780 
2019-08-20 11:18:20.853
2019-08-20 11:18:56.120
2019-08-20 11:20:16.520
2019-08-20 11:21:09.600
2019-08-21 18:30:00.000
2019-08-21 18:30:00.000
2019-08-21 18:30:00.000
2019-08-22 18:30:00.000
2019-08-22 18:30:00.000
2019-08-22 18:30:00.000
2019-08-26 18:30:00.000
2019-08-28 18:30:00.000

您可以按的顺序使用条件键:

order by (case when convert(date, scheduleddate) = convert(date, getdate()) then 1 else 2 end),
         scheduleddate asc

您可以按的顺序使用条件键:

order by (case when convert(date, scheduleddate) = convert(date, getdate()) then 1 else 2 end),
         scheduleddate asc

最直接的方法可能是使用联合运算符。大概是这样的:

SELECT * FROM TABLE WHERE ScheduledDate = GETDATE() ORDER BY ScheduledDate DESC
UNION
SELECT * FROM TABLE ORDER BY ScheduledDate DESC
它的性能不是很好,因为它需要两个单独的select语句,但是它很容易阅读和维护


编辑:不知道如何在LINQ中执行此操作,但这适用于SQL Server。

最简单的方法可能是使用联合运算符。大概是这样的:

SELECT * FROM TABLE WHERE ScheduledDate = GETDATE() ORDER BY ScheduledDate DESC
UNION
SELECT * FROM TABLE ORDER BY ScheduledDate DESC
它的性能不是很好,因为它需要两个单独的select语句,但是它很容易阅读和维护


编辑:不知道如何在LINQ中执行此操作,但这适用于SQL Server。

假设您的表是Orders

var today = DateTime.Today;

var result = context.Orders
              .OrderByDecending(o => o.ScheduledDate.Date == today)
              .ThenBy(o => o.ScheduledDate)
              .Select(o => o)
              .ToList()
这将按升序对当前日期和其余日期进行排序。由于要在“今天”不可用时获取最接近的日期,您可能必须首先使用不同的查询获取最接近的日期,并在上述查询中将
today
替换为
nearestDate


干杯,

让我们假设您的桌子是订单

var today = DateTime.Today;

var result = context.Orders
              .OrderByDecending(o => o.ScheduledDate.Date == today)
              .ThenBy(o => o.ScheduledDate)
              .Select(o => o)
              .ToList()
这将按升序对当前日期和其余日期进行排序。由于要在“今天”不可用时获取最接近的日期,您可能必须首先使用不同的查询获取最接近的日期,并在上述查询中将
today
替换为
nearestDate


干杯,

在@GordonLinoff的SQL查询的帮助下,我创建了Linq查询:

对于Linq:

DbContext.Table.
OrderBy(x=> (DateTime.Compare(DateTime.Parse(x.ScheduledDate.GetValueOrDefault().ToString("MM/dd/yyyy")), DateTime.Parse(today)) == 0 ? 1 : 2 )).ThenByDescending(x=>x.ScheduledDate);
对于SQL:

order by (case when convert(date, scheduleddate) = convert(date, getdate()) then 1 else 2 end),
scheduleddate asc

因此,在@GordonLinoff的SQL查询的帮助下,我创建了Linq查询:

对于Linq:

DbContext.Table.
OrderBy(x=> (DateTime.Compare(DateTime.Parse(x.ScheduledDate.GetValueOrDefault().ToString("MM/dd/yyyy")), DateTime.Parse(today)) == 0 ? 1 : 2 )).ThenByDescending(x=>x.ScheduledDate);
对于SQL:

order by (case when convert(date, scheduleddate) = convert(date, getdate()) then 1 else 2 end),
scheduleddate asc

?您当前的代码在哪里?您当前的代码在哪里?嘿,谢谢,这很有效,您知道我如何使用GN Linq进行操作吗?嘿,谢谢,这很有效,您知道我如何使用GN Linq进行操作吗?