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

LINQ to Entities中Where子句数值转日期运算报错的技术咨询

解决LINQ to Entities不支持AddHours方法的问题

LINQ to Entities无法将.NET原生的DateTime.AddHours方法转换为对应SQL语句,因此会抛出你遇到的异常。可以通过以下两种方式解决:

方法一:转换比较逻辑(推荐)

把对数据库字段的时间操作转移到客户端常量上,EF能正确生成对应的SQL。原逻辑「开始时间减去截止小时数 > 当前UTC时间」,等价于「开始时间 > 当前UTC时间加上截止小时数」,修改后的Where条件如下:

.Where(x => x.Capacity != null &&
            x.Capacity != 0  &&
            x.Start_Datetime > currentDateTime.AddHours((double)x.Event_Registration_Deadline) && // 核心修改
            x.Fully_Booked_Flag != Constants.YesFlag &&
            x.CoC_Schedule_Entry_Type.Schedule_Entry_Type_Code.Equals(lookuptype) &&
            x.CoC_Lookup3.Hidden_Value.Equals(LookupCodes.OpenHiddenValue) 
            && (x.Program_Preference_ID == programPreferenceId
            ||
            x.Program_Preference_ID == null))

方法二:使用EF内置数据库函数

根据你使用的EF版本,调用EF提供的可转换为SQL的时间函数:

  • EF6:使用DbFunctions.AddHours
  • EF Core:使用EF.Functions.AddHours

修改后的核心条件代码:

// EF6版本
DbFunctions.AddHours(x.Start_Datetime, (double)-x.Event_Registration_Deadline) > currentDateTime

// EF Core版本
EF.Functions.AddHours(x.Start_Datetime, (double)-x.Event_Registration_Deadline) > currentDateTime

注意:使用这种方式需要确保引入对应命名空间(EF6需引入System.Data.Entity,EF Core需引入Microsoft.EntityFrameworkCore)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:25:20