中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

EF架構~LinqToEntity里實現left join的一對一與一對多

回到目錄

對于linq to sql里實現(xian)(xian)left join我(wo)(wo)(wo)已經介紹過了(le),這(zhe)篇(pian)文章的(de)(de)出(chu)現(xian)(xian)是(shi)(shi)由于最(zui)近在(zai)項目里遇到的(de)(de)一(yi)(yi)個(ge)問題,解(jie)決這(zhe)個(ge)問題花(hua)了(le)我(wo)(wo)(wo)不(bu)少時(shi)間,可(ke)(ke)能有2個(ge)小時(shi),事件是(shi)(shi)這(zhe)樣的(de)(de),對于兩(liang)個(ge)表,它(ta)們是(shi)(shi)一(yi)(yi)對多關(guan)系,而(er)需(xu)求(qiu)是(shi)(shi)返(fan)回(hui)一(yi)(yi)個(ge)一(yi)(yi)對一(yi)(yi)的(de)(de)關(guan)系,并將最(zui)新的(de)(de)數據返(fan)回(hui),這(zhe)個(ge)很多同學都(dou)知道,可(ke)(ke)以使用(yong)inner join,但是(shi)(shi),對于inner  join來說,當處理的(de)(de)是(shi)(shi)一(yi)(yi)對多關(guan)系時(shi),它(ta)將會出(chu)現(xian)(xian)多條記錄,這(zhe)也是(shi)(shi)正常的(de)(de);而(er)它(ta)并不(bu)滿足我(wo)(wo)(wo)們今天的(de)(de)需(xu)求(qiu),經過測試后,找(zhao)到了(le)解(jie)決這(zhe)個(ge)問題的(de)(de)方法,下面看代(dai)碼:

一對多關系

from r in base.GetModel()
join data in new TsingDa_NewLearningBarRepository<FAQ_Reply>(UnitWork).GetModel().Where(i => i.Status == (int)Status.Normal)
on r.FAQInfoID equals data.FAQInfoID into list

這個(ge)很容易理解,將滿(man)足faqinfoId的FAQ_Reply集合獲出,放入list變量中。

一對一關系

from r in base.GetModel()
join data in new TsingDa_NewLearningBarRepository<FAQ_Reply>(UnitWork).GetModel().Where(i => i.Status == (int)Status.Normal)
on r.FAQInfoID equals data.FAQInfoID

這(zhe)種寫(xie)法是(shi)正規的inner join寫(xie)法,它適合于數(shu)據(ju)結構中(zhong)的一(yi)(yi)(yi)對(dui)一(yi)(yi)(yi)關系(xi),即兩張表有相同的主鍵,它們在數(shu)據(ju)中(zhong)是(shi)嚴格(ge)一(yi)(yi)(yi)對(dui)一(yi)(yi)(yi)的,如果不是(shi)一(yi)(yi)(yi)對(dui)一(yi)(yi)(yi),那種,這(zhe)個語句將(jiang)會出現重復數(shu)據(ju)!

下面是在EF中對(dui)left  join進行的一對(dui)一改造

 join data in new TsingDa_NewLearningBarRepository<FAQ_Reply>(UnitWork).GetModel().Where(i => i.Status == (int)Status.Normal)
 on r.FAQInfoID equals data.FAQInfoID into list
 from data in list.EmptyOrDefalt()

可很遺憾,并不成功,還是(shi)返回的重復數據,這(zhe)在傳統的linq to sql中是(shi)可以的,但在linq to entity中是(shi)不行的,因為它們生成SQL語句的內核(he)不同

正確的一對一做法

 join data in new TsingDa_NewLearningBarRepository<FAQ_Reply>(UnitWork).GetModel().Where(i => i.Status == (int)Status.Normal)
 on r.FAQInfoID equals data.FAQInfoID into list
 select new FAQ_Info_Ext()
 {
  FAQReply = list.OrderByDescending(i => i.AddTime).FirstOrDefault()
 }

我(wo)們(men)可以(yi)看(kan)到(dao),它的巧妙是在數(shu)據賦值上...

看一個數據庫的監控

剛看(kan)到后(hou),真是(shi)(shi)下(xia)了我一大跳,怎么連了這么多庫呀,暈,然后(hou),本地設斷(duan)點調試了一下(xia),原來和我的(de)代(dai)(dai)碼沒有關系(xi),是(shi)(shi)其(qi)它代(dai)(dai)碼惹的(de)禍!

我(wo)的代(dai)碼運行是這樣的

這是可以接(jie)受的,在我(wo)的預料之中,呵(he)(he)呵(he)(he)。

回到目錄

posted @ 2014-08-18 14:55  張占嶺  閱讀(11590)  評論(0)    收藏  舉報