在做系統(tǒng)的時(shí)候,經(jīng)常遇到前臺(tái)錄入一大堆的查詢條件,然后點(diǎn)擊查詢提交后臺(tái),在Controller里面生成對(duì)應(yīng)的查詢SQL或者表達(dá)式,數(shù)據(jù)庫執(zhí)行再將結(jié)果返回客戶端。

例如如下頁面,輸入三個(gè)條件,日志類型、開始和結(jié)束日期,查詢后臺(tái)系統(tǒng)操作日志,并顯示。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

這種類似頁面在系統(tǒng)中還是比較多的,通常情況下,我們會(huì)在cshtml中放上日志類型、開始、結(jié)束日期這三個(gè)控件,controller的action有對(duì)應(yīng)的三個(gè)參數(shù),然后在action、邏輯層或者倉儲(chǔ)層實(shí)現(xiàn)將這三個(gè)參數(shù)轉(zhuǎn)換為linq,例如轉(zhuǎn)成c=>c.BeginDate>=beginDate && c.EndDate < endDate.AddDay(1) && c.OperType == operType。

這里有個(gè)小技巧,就是結(jié)束日期小于錄入的結(jié)束日期+1天。一般大家頁面中錄入結(jié)束日期的時(shí)候都是只到日期,不帶時(shí)分秒,例如結(jié)束日期為2016年1月31日,endDate 就是2016-01-31。其實(shí)這時(shí)候,大家的想法是到2016年1月31日23:59:59秒止。如果數(shù)據(jù)庫中存儲(chǔ)的是帶時(shí)分秒的時(shí)間,例如2016-01-31 10:00:00.000,而程序中寫的是c.EndDate < endDate的話,那么這個(gè)2016年1月31日零點(diǎn)之后的全不滿足條件。所以,這里應(yīng)該是小于錄入的結(jié)束日期+1。

網(wǎng)友評(píng)論