LINQ to Entities 中使用的 AddDays 在除一台服务器之外的所有服务器中引发错误
Posted
技术标签:
【中文标题】LINQ to Entities 中使用的 AddDays 在除一台服务器之外的所有服务器中引发错误【英文标题】:AddDays used in LINQ to Entities throwing error in all but one server 【发布时间】:2014-12-10 02:23:05 【问题描述】:在开发环境中,以下 SQL 语句正在运行,但在任何其他环境中都不起作用:
System.NotSupportedException:LINQ to Entities 无法识别方法“System.DateTime AddDays(Double)”方法,并且该方法无法转换为存储表达式。
相关代码:
bool hasSomethinglast14days = (from a in db.someTable
where a.SomeIntColumn == someIntVariable
&& a.CreateDate >= DateTime.UtcNow.AddDays(-14)
select a.someColumn).Any();
【问题讨论】:
我真的很想知道这在开发环境中是如何工作的。那里的数据库有什么完全不同的地方吗?还是某种不同的实体提供者?我不希望这适用于任何必须针对数据库实现的表达式树。 【参考方案1】:您使用的提供程序无法将 AddDays()
方法转换为有效的 SQL 语句。
由于您要从中减去的日期无论如何都不依赖于数据库中的任何值,因此只需先进行减法(在查询之外),然后使用结果值:
var pastDate = DateTime.UtcNow.AddDays(-14);
bool hasSomethinglast14days = (from a in db.someTable
where a.SomeIntColumn == someIntVariable
&& a.CreateDate >= pastDate
select a.someColumn).Any();
至于它在您的开发环境中工作,我没有答案。我很惊讶它确实如此。
【讨论】:
即使我知道答案,它似乎一开始就没有在开发环境中工作过。谢谢!以上是关于LINQ to Entities 中使用的 AddDays 在除一台服务器之外的所有服务器中引发错误的主要内容,如果未能解决你的问题,请参考以下文章
在实体框架和 Linq to Entities 中使用规范模式和表达式
为啥 LINQ-to-Entities 将此查询放在子选择中?
在 LINQ to Entities 中使用交叉应用取消透视数据