如何在Linq/Sql中按当前日期订购?
我正在从表中提取数据,但我希望使用列“ScheduledDate”对数据进行排序,当前日期在顶部(如果不是当前日期,则最接近的日期在顶部),并且在该列之后休息,即使有未来的日期 资料 预期结果:如何在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
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进行操作吗?