有没有办法让Linq-to-entities评估本地表达式

时间:2011-02-22 17:13:54

标签: linq entity-framework

假设您有以下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表达式的一部分并替换一个常量值,而不必声明一个局部变量来保存它?

3 个答案:

答案 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表达式。