LINQ to Entities 不识别方法“System.DateTime AddDays(Double)

今天本想在linq里按照时间筛选一下超时的数据,一共两个字段FeedBackTime(计划反馈时间)、EndTime(实际反馈时间)。需求是这样的,查找数据库里所有EndTime大于FeedBackTime,且只计算到日,时分秒就不计算了。也就是说 计划时间和实际时间是同一天或实际时间小于计划时间,那么就认为不是超时的。

开始的时候我使用了下面这种方式:

query.Where(c =>c.FeedBackTime > c.EndTime.AddDays(1));

结果报错:

LINQ to Entities 不识别方法“System.DateTime AddDays(Double) 因此该方法无法转换为存储表达式

然后换用SqlFunctions. DateDiff 方法:

返回所指定开始日期和结束日期之间的指定 datepart 边界的计数。

query.Where( c => SqlFunctions.DateDiff("day", c.FeedBackTime, c.EndTime) < 0);
解决了。
 
命名空间:   System.Data.Objects.SqlClient 
程序集:System.Data.Entity(在 System.Data.Entity.dll 中) 

  

[EdmFunctionAttribute("SqlServer", "DATEDIFF")]
public static Nullable<int> DateDiff(
    string datePartArg,
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)

  

参数
datePartArg 
类型: System.String
要计算时间间隔差值的日期部分。 

startDate 
类型: System.Nullable<DateTime>
第一个日期。 

endDate 
类型: System.Nullable<DateTime>
第二个日期。 

返回值
类型: System.Nullable<Int32>
两个日期之间的时间间隔数。

  

无法直接调用此函数。 此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

  

原文地址:https://www.cnblogs.com/mantishell/p/10714738.html