假设您有以下linq表达式:
from o in salesEntities.Orders where o.OrderDate < DateTime.Today.AddDays(-20) select o
实体框架不知道如何将DateTime.Today.AddDays(-20)转换为实体SQL表达式,并且您收到以下错误:
LINQ to Entities无法识别方法'System.DateTime AddDays(Double)'方法,并且此方法无法转换为商店表达式。
所以这是我的问题:有没有办法让Linq to Entities评估lambda表达式的一部分并替换一个常量值,而不必声明一个局部变量来保存它?
答案 0 :(得分:9)
LINQ-to-Entities可以处理本地值,但不能处理本地表达式。您的代码将适用于此次微小更改:
var pastDate = DateTime.Today.AddDays(-20);
from o in salesEntities.Orders where o.OrderDate < pastDate select o
答案 1 :(得分:5)
使用EntityFunction更改表达式,以便像这样添加天数:
var result =
(
from o in salesEntities.Orders
where o.OrderDate < System.Data.Objects.EntityFunctions.AddDays(DateTime.Today,-20)
select o
);
答案 2 :(得分:3)
简短的回答是否定的。 linq to entity表达式中的所有内容都必须位于局部变量中,或者能够由实体框架转换为sql表达式。