這篇部落格總結本人在實際專案中遇到的一些關於ef或者linq的問題,作為以後複習的筆記或者供後來人參考(遇到問題便更新)。
有沒有遇到做這樣的錯誤:
var query = from order in _orderrepository.getall()
.where(o => o.ordertype == ordertype.linesold)
.whereif(input.orderdate!=datetime.minvalue,o=>o.orderdate.date==input.orderdate.date)
.whereif(!string.isnullorempty(input.orderno),o=>o.orderno==input.orderno||o.orderno.endswith(input.orderno))
.whereif(input.status!=-1,o=>o.status==input.status)
join device in _devicerepository.getall()
.whereif(!string.isnullorempty(input.code),d=>d.code==input.code) on order.terminalid equals device.id
join trans in _transdetailrepository.getall()
.whereif(!string.isnullorempty(input.payorderno),t=>t.payorderno==input.payorderno||t.payorderno.endswith(input.payorderno))
on order.orderno equals trans.orderno into leftjoinresults
from leftjoinresult in leftjoinresults.defaultifempty( )
select new linesoldorderoutput
;
為啥有這種需求?
因為資料庫中的datetime型別都是以2016-03-11 11:25:59
這種形式儲存的,而我在客戶端查詢資料時,只要傳入日期就行,不需要傳入時間部分,所以必須把時間部分咔嚓掉(剪掉)。
正如上面的**第三行,一開始是那麼寫的,結果報上面的第二種錯誤。
第二次改成了.whereif(input.orderdate!=datetime.minvalue,o=>o.orderdate.toshortdatestring()==input.orderdate.toshortdatestring())
,結果報上面的第一種錯誤。
解決辦法
.whereif(input.orderdate!=datetime.minvalue,o=>dbfunctions.truncatetime(o.orderdate)
【我用的是ef6,truncate,翻譯為截斷,該函式顧名思義也就是把時間部分去掉,只保留日期部分】
ef6以前你可能需要用entityfunctions.truncatetime(p.date) == datewithouttime
其他重點有時候,在處理資料的時候,需要對資料進行分組,而且是對datetime型別的字段按照年月進行分組,下面分別使用linq的方法語法和查詢語法進行分組:我上面的**還有使用linq進行三張表的連線,更重要的是,前兩張表是內連線,之後再進行左連線。不熟悉linq語法的可以學習一下。
方法語法
dateincomedtos = query
.where(o => o.orderdate >= input.start && o.orderdate < dbfunctions.addmonths(input.end,1))
.orderby(o => o.orderdate)
.groupby(o => dbfunctions.createdatetime(o.orderdate.year, o.orderdate.month, 1, 0, 0, 0))
.select(group => new dateincomedto );
查詢語法dateincomedtos = from q in query
group q by new
into g
select new dateincomedto
;
方法語法使用的是linq中提供的dbfunctions類中的createdatetime方法,給day的引數傳入乙個1至29中的整數,保證每個月中有這一天即可(我這裡傳入了1),這樣,在分組的時候,ef就會將資料庫中的每條記錄的orderdate欄位的年和月進行分組。
查詢語法思想是一樣的,只不過用到了匿名類而已。
element ui dialog使用過程中的坑
場景一 我們將dialog寫成乙個可復用的公共元件用於顯示不同內容 如 操作中的修改或新增的彈窗 之後發現dialog的遮罩將彈出層 點選修改或新增後理應由乙個彈窗顯示出來 都蓋住了,而我想要的效果是遮罩只遮住舊的視窗,而當前視窗應該完全顯示 注 是使用easyui的panel和window來包裹的...
robotframework使用過程中的一些總結
robot framework是乙個基於python可擴充套件地關鍵字驅動的測試自動化框架,robot framework被廣泛地使用在端到端地驗收測試以及驗收測試驅動開發的過程中。1.在rf中輸入部分關鍵字的名稱時,使用shift control 空格可以延伸出所有相關的關鍵字 2.suit下打t...
python使用過程中問題
1.檢視python支援的 whl格式 在cmd輸入python 或者 python3.6 import pip print pip.pep425tags.get supported 2.在修改python.exe為python36.exe 任何重新命名 後,pip會報錯 fatal error i...