回到目錄
對于在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();
然後程式可以正常使用了,感謝各位的閱讀!
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!
