根據用戶輸入的起始日期,查詢以起始日期開始的前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中直接使用方法。
運行,正常。不再出現錯誤信息。