回到目錄 對於在Linq To Entity里使用日期函數需要DbFunctions里的擴展方法,而不能使用.net里的日期函數,因為linq的代碼會被翻譯成SQL發到資料庫端,如你的.net方法對於資料庫是不知道的,所以需要使用DbFunctions里的函數,它是為sqlserver設計的,而如果 ...
對於在Linq To Entity里使用日期函數需要DbFunctions里的擴展方法,而不能使用.net里的日期函數,因為linq的代碼會被翻譯成SQL發到資料庫端,如你的.net方法對於資料庫是不知道的,所以需要使用DbFunctions里的函數,它是為sqlserver設計的,而如果你的數據源是mysql,那你就尷尬了,我開始以為Mysql.Data里集成了這些擴展函數,可遺憾的是沒有集成,所以我們需要使用其它解決方案。
DbFunctions里的資料庫函數
支持MySql的解決方案
在mysql里添加對象的自函數函數
BEGIN #返回兩個日期相差月份數 RETURN PERIOD_DIFF(DATE_FORMAT(`to`,'%Y%m'),DATE_FORMAT(`from`,'%Y%m')); END
然後在linq里使用DbFunctions就可以OK了,不會出現未定義函數的問題了
var result =repository.GetModel( i => DbFunctions.DiffMonths(i.CreateDate, DateTime.Now) > 1)
.Take(20)
.ToList();
然後程式可以正常使用了,感謝各位的閱讀!