今天本想在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 查詢中。 此函數將被轉換為數據庫中對應的函數。