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 查詢中。

此函數將被轉換為數據庫中對應的函數。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM