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
- 卸载Nuget包
Microsoft.EntityFrameworkCore - 引用命名空间
System.Data.Entity - 替换查询代码为:
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
- 卸载Nuget包
Entity Framework - 引用命名空间
Microsoft.EntityFrameworkCore - 替换查询代码为:
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
相关产品推荐
相关产品推荐

