繁体   English   中英

在LINQ中按日期差异排序

[英]Order by date diff in LINQ

我必须在表中及时找到最接近的事件。 如果三天前发生了一个事件,而下一个事件将在明天发生,那么我要第二个事件。 反之亦然,如果昨天发生了一个事件,下一个事件将在下个月发生,我想要第一个事件。

因此,我基于日期之间以秒为单位的绝对差(不超过1个结果)来编写查询。

在伪SQL中,类似:

select * from events order by ABS(UNIXTIME(kickoff) - UNIXTIME(now)) limit 1

在LINQ中:

Context.Events.OrderBy(m => Math.Abs( m.KickOff - DateTime.UtcNow ).TotalSeconds ).FirstAsync();

它可以工作,但是order by是在内存中而不是在SQL中组成的。“ LINQ表达式'orderby Abs(([[m] .KickOff-DateTime.UtcNow).TotalSeconds)asc'无法翻译,将在本地进行评估。

如何在sql中通过查询执行订单?

编辑

去除腹肌

Context.Events.OrderBy(m => m.KickOff - DateTime.UtcNow ).FirstAsync();

如我所愿

[...] ORDER BY `m`.`kickoff` - UTC_TIMESTAMP() 

但这并没有给我我期望的结果

假设您正在使用Entity FrameworkSQL Server ,则可以在System.Data.Entity.SqlServer使用SqlFunctions.DateDiff

Context.Events.OrderBy(m => Math.Abs(SqlFunctions.DateDiff("ss", DateTime.UtcNow, m.KickOff)))
              .FirstAsync();

这是假设now开始日期和kick off结束日期。 您可以根据需要交换它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM