You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 2.0中Entity Framework DateTime加时查询替代SqlFunctions方案咨询

在.NET Core 2.0 EF中实现DateTime加小时的查询

嘿,这个问题我之前在项目里也碰到过!.NET Core 2.0的EF Core确实移除了旧的SqlFunctions,不过有几个替代方案可以完美实现你的需求,我给你详细说说:

方法一:使用EF Core的DbFunctions.AddHours

EF Core专门提供了DbFunctions类来处理这类需要转换为SQL的数据库操作,其中就包含AddHours方法。使用前记得引用Microsoft.EntityFrameworkCore命名空间,它会自动把这个方法翻译成SQL的DATEADD语句。

示例代码:

using Microsoft.EntityFrameworkCore;

// 假设你的实体是Order,包含DateTime类型的OrderTime属性
var query = _context.Orders
    .Where(o => DbFunctions.AddHours(o.OrderTime, 3) <= DateTime.Now)
    .Select(o => new { o.OrderId, o.OrderTime });

var results = await query.ToListAsync();

方法二:直接使用C#的DateTime.AddHours

EF Core 2.0已经支持将C#原生的DateTime.AddHours方法直接转换为对应的SQL语句,这种写法更简洁直观,不需要额外引用特殊类:

示例代码:

var query = _context.Orders
    .Where(o => o.OrderTime.AddHours(3) <= DateTime.Now)
    .Select(o => new { o.OrderId, o.OrderTime });

var results = await query.ToListAsync();

小贴士:这种写法在EF Core 2.0及以上版本都能正常工作,EF会自动把AddHours翻译为SQL的DATEADD(HOUR, @hours, @date)。

方法三:原生SQL查询(特殊场景备用)

如果上面两种方法都不适合你的场景(比如复杂的自定义SQL逻辑),可以直接使用原生SQL查询:

示例代码:

int hoursToAdd = 3;
var results = await _context.Orders
    .FromSql($"SELECT OrderId, OrderTime FROM Orders WHERE DATEADD(HOUR, {hoursToAdd}, OrderTime) <= GETDATE()")
    .ToListAsync();

注意:如果使用参数的话,建议用参数化查询避免SQL注入,比如通过SqlParameter传递参数。

内容的提问来源于stack exchange,提问作者Diego

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:54:33