LINQ to Entities does not recognize the method , and this method cannot be translated into a store expression 解決辦法


根據用戶輸入的起始日期,查詢以起始日期開始的前20條記錄,在ASP.NET MVC的Controller代碼中這樣寫:

            var Logs = db.Log.Take(20);
       if (!string.IsNullOrEmpty(dateBegin)) { Logs = Logs.Where(a => a.Date >= Convert.ToDateTime(dateBegin)).Take(20); }

運行后,出現下面錯誤信息:

對於這種情況,要清楚:本表達式只是LINQ to Entities,而不是真正的C#語言,雖然上述代碼在編譯是沒有錯誤,但運行時,轉換為SQL就產生了錯誤,無法轉換為存儲表達式。

解決辦法是:將用戶輸入的起始日期的轉換提前一步,使用真正的C#代碼完成,然后將轉換后的變量代入到LINQ表達式內,修改后的代碼可以這樣:

            var Logs = db.Log.Take(20);
       if (!string.IsNullOrEmpty(dateBegin)) { DateTime dateB = Convert.ToDateTime(dateBegin); Logs = Logs.Where(a => a.Date >= dateB).Take(20); }

可以看到,首先將轉換后的日期存入變量dateB內,然后再使用LINQ調用,不在LINQ中直接使用方法。

運行,正常。不再出現錯誤信息。


 


免責聲明!

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



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