ef linq 查詢某時間段內數據 踩的坑


var now = DateTime.Now;
var
list =db.Jinbi_TypeLimit.Where(x => x.IsAvailable && x.JinbiType == jinbitype && x.StartDateTime <= now && now <= x.EndDateTime);//.ToList(); var list1 =db.Jinbi_TypeLimit.Where(x => x.IsAvailable && x.JinbiType == jinbitype && x.StartDateTime <= DateTime.Now && DateTime.Now <= x.EndDateTime);//.ToList();

執行的結果:

list:  兩條數據

list1:0條數據

原因分析:

list:

最終數據庫執行的語句,時間比較部分轉化為 

x.StartDateTime <= '2015-12-07' &&'2015-12-07'<= x.EndDateTime

list1:

最終數據庫執行的語句,時間比較部分轉化為 

x.StartDateTime <= (SYSDATETIME()) &&(SYSDATETIME())<= x.EndDateTime

語句本身來看這個本身也沒什么不對,但是 如果程序和數據庫不在一台服務器(現在大部分情況都是這樣的吧),如果web服務器和數據庫服務器的時間不一樣的話,情況來了。(估計你現在已經想到了)

對於list,時間是變量傳入的,那就是web服務器的系統時間
對於list1,SYSDATETIME()是數據庫服務器的系統時間
如果兩台服務器設置的系統時間不一樣,你懂的。結果肯定不一樣

今天調試代碼發現的問題,留作紀念。
不知道哪個二逼把服務器時間改了



免責聲明!

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



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