在工作中遇到個問題,在使用lamda查詢數據的時候,需要添加一個時間判斷, DateTime.AddDays(3) > e.ExpirationDate
例如:list = Context.VoucherUserSignPLView.Where(e => e.IsUse == isUse && e.ExpirationDate >= DateTime.Now && DateTime.AddDays(days) > e.ExpirationDate).ToList();
當然,這段代碼能夠完全通過編譯,但問題來了,當運行到該句時,卻報錯了
--->其他信息: LINQ to Entities 不識別方法“System.DateTime AddDays(Double)”,因此該方法無法轉換為存儲表達式。
問題很明顯,不識別AddDays方法,只能換個東東,於是 EntityFunctions 類 登場了, 實體方法s,一目了然。
msdn 上面的解釋 :提供在 LINQ to Entities 查詢中,公開概念模型規范函數的公共語言運行時 (CLR) 方法。
https://msdn.microsoft.com/zh-cn/library/vstudio/system.data.objects.entityfunctions(v=vs.100).aspx
於是選用了自己需要的方法 EntityFunctions.DiffDays。
使用后:list = Context.VoucherUserSignPLView.Where(e => e.IsUse == isUse && e.ExpirationDate >= DateTime.Now && System.Data.Objects.EntityFunctions.DiffDays(DateTime.Now, e.ExpirationDate) <= days).ToList();
運行無異常。