Linq之include


  入園很長時間了,每次都想寫點什么,但也沒抽出時間,一直都是在默默的關注大牛們的博客。

  為什么那么多單身的程序員?因為程序員在編程的過程中總是會碰到一個問題,找不到對象,呵呵。

  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。

  第一次寫博客,希望大家勿噴。謝謝!

  


免責聲明!

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



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