入園很長時間了,每次都想寫點什么,但也沒抽出時間,一直都是在默默的關注大牛們的博客。
為什么那么多單身的程序員?因為程序員在編程的過程中總是會碰到一個問題,找不到對象,呵呵。
Linq中include的用法你是否了解呢?曾經查閱過msdn,發現上面講的自己不是很明白,但是經過項目這一實現總算徹底清楚了。
現在項目有這樣一個功能,就是先將數據查詢出來,然后將查詢出來的數據導成excel。系統采用的是entityframework框架,數據訪問層用的是linq,
於是我這樣寫查詢的底層方法:
var res = from b in dataContext.B
where ((string.IsNullOrEmpty(txtname) || b.Name.ToUpper().Contains(txtname.ToUpper())) 再加上一些其他的查詢條件,很快寫完了,自我感覺很不錯,於是測試一下,但是在測試的過程中發現有一個問題,查詢的時候沒有錯,但是填充excel時出現這樣一個錯:“The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.”(查詢和填充excel都是同一個數據源,都是調的一個底層方法)。很多人可能會感到奇怪了,同樣是一個底層方法,為什么查詢不出錯,填充excel的時候不出錯呢?這時include就起作用的了.我們知道inlcude的作用是“返回其關聯實體”,但是很多時候卻不知道返回來的關聯實體有什么用,關聯實體又是什么。前面已經說了,數據訪問層用linq實現,那么回到系統架構的DomainEntities 模型中, 查看查詢表的結構,可以找到相應的實體。這時加上關聯的實體
var res= from b in dataContext.B.include("BA").include("BC").include("BA.D")
where ((string.IsNullOrEmpty(txtname) || b.Name.ToUpper().Contains(txtname.ToUpper()))再加上一個其他的查詢條件,這是在測試一下,發現程序運行正常。
其中“BA”和“BC”是b的關聯實體,可以在DomainEntities找到,但是include("BA.D")呢,這是通過B的關聯實體BA去訪問D表,然后再執行填充excel。
第一次寫博客,希望大家勿噴。謝謝!