gpt4 book ai didi

c# - LINQ 中按日期差异排序

转载 作者:太空宇宙 更新时间:2023-11-03 14:48:41 29 4
gpt4 key购买 nike

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

所以我根据日期之间以秒为单位的绝对差异来编写查询,限制为 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 中使用 SqlFunctions.DateDiff .SqlServer:

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

这假定 now 为开始日期,kick off 为结束日期。如果需要,您可以交换它们。

关于c# - LINQ 中按日期差异排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52890473/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com