今天本想在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 查询中。 此函数将被转换为数据库中对应的函数。