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

LINQ Entity Framework日期比较报错无法翻译 找不到DbFunctions如何解决

报错原因

你写的LINQ语句里的日期差值计算逻辑(e.DueDt.Value - DateTime.Now).Days无法被EF框架转换为SQL语句,所以触发了翻译失败报错。
找不到DbFunctions/Entity类的核心原因是你同时安装了Entity Framework 6和Entity Framework Core 5两个互不兼容的框架版本,二者的命名空间和API存在冲突,导致无法正常访问对应类型。

解决方案

你需要先确定自己实际使用的EF版本,卸载掉另一个无用的EF包后按照对应方案修改代码即可:

如果你使用的是Entity Framework 6

  1. 卸载Nuget包Microsoft.EntityFrameworkCore
  2. 引用命名空间System.Data.Entity
  3. 替换查询代码为:
List<EPCRA_Events> x = 
    _dbContext.EPCRA_Events
              .Where(e => e.DueDt.HasValue && 
                          DbFunctions.DiffDays(DateTime.Now, e.DueDt.Value) < 30)
              .ToList();

如果你使用的是Entity Framework Core 5

  1. 卸载Nuget包Entity Framework
  2. 引用命名空间Microsoft.EntityFrameworkCore
  3. 替换查询代码为:
List<EPCRA_Events> x = 
    _dbContext.EPCRA_Events
              .Where(e => e.DueDt.HasValue && 
                          EF.Functions.DateDiffDay(DateTime.Now, e.DueDt.Value) < 30)
              .ToList();

临时兼容方案(仅适合数据量小的场景)

如果不想处理版本冲突,可以先将满足非空条件的记录加载到内存后再做日期判断,不需要修改EF包配置:

List<EPCRA_Events> x = 
    _dbContext.EPCRA_Events
              .Where(e => e.DueDt.HasValue)
              .AsEnumerable()
              .Where(e => (e.DueDt.Value - DateTime.Now).Days < 30)
              .ToList();

内容的提问来源于stack exchange,提问作者M. Rogers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:12:01