linq和lamda表達式中添加時間判斷時解決方案


在工作中遇到個問題,在使用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();

 

運行無異常。

 

 


免責聲明!

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



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