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

Dar*_*ren 4 linq entity-framework

假设您有以下linq表达式:

from o in salesEntities.Orders where o.OrderDate < DateTime.Today.AddDays(-20) select o
Run Code Online (Sandbox Code Playgroud)

实体框架不知道如何将DateTime.Today.AddDays(-20)转换为Entity SQL表达式,并且您收到以下错误:

LINQ to Entities无法识别方法'System.DateTime AddDays(Double)'方法,并且此方法无法转换为商店表达式.

所以这是我的问题:有没有办法让Linq to Entities评估lambda表达式的一部分并替换一个常量值,而不必声明一个局部变量来保存它?

Rob*_*evy 9

LINQ-to-Entities可以处理本地值,但不能处理本地表达式.您的代码将适用于此次微小更改:

var pastDate = DateTime.Today.AddDays(-20);

from o in salesEntities.Orders where o.OrderDate < pastDate select o

  • 这是正确的.如果您确实在查询中需要`AddDays`(这不是其中之一),请使用`EntityFunctions`类型. (4认同)

小智 5

使用EntityFunction更改表达式以添加如下天数:

var result =
(
from o in salesEntities.Orders 
where o.OrderDate < System.Data.Objects.EntityFunctions.AddDays(DateTime.Today,-20) 
select o
);
Run Code Online (Sandbox Code Playgroud)

  • 这不再适用于实体框架6.请改用:System.Data.Entity.DbFunctions.AddDays (3认同)