EF架构~LinqToEntity里实现left join的一对一与一对多
回到目錄
對(duì)于linq to sql里實(shí)現(xiàn)left join我已經(jīng)介紹過了,這篇文章的出現(xiàn)是由于最近在項(xiàng)目里遇到的一個(gè)問題,解決這個(gè)問題花了我不少時(shí)間,可能有2個(gè)小時(shí),事件是這樣的,對(duì)于兩個(gè)表,它們是一對(duì)多關(guān)系,而需求是返回一個(gè)一對(duì)一的關(guān)系,并將最新的數(shù)據(jù)返回,這個(gè)很多同學(xué)都知道,可以使用inner join,但是,對(duì)于inner? join來說,當(dāng)處理的是一對(duì)多關(guān)系時(shí),它將會(huì)出現(xiàn)多條記錄,這也是正常的;而它并不滿足我們今天的需求,經(jīng)過測試后,找到了解決這個(gè)問題的方法,下面看代碼:
一對(duì)多關(guān)系
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這個(gè)很容易理解,將滿足faqinfoId的FAQ_Reply集合獲出,放入list變量中。
一對(duì)一關(guān)系
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這種寫法是正規(guī)的inner join寫法,它適合于數(shù)據(jù)結(jié)構(gòu)中的一對(duì)一關(guān)系,即兩張表有相同的主鍵,它們在數(shù)據(jù)中是嚴(yán)格一對(duì)一的,如果不是一對(duì)一,那種,這個(gè)語句將會(huì)出現(xiàn)重復(fù)數(shù)據(jù)!
下面是在EF中對(duì)left? join進(jìn)行的一對(duì)一改造
join data in new TsingDa_NewLearningBarRepository<FAQ_Reply>(UnitWork).GetModel().Where(i => i.Status == (int)Status.Normal)on r.FAQInfoID equals data.FAQInfoID into listfrom data in list.EmptyOrDefalt()可很遺憾,并不成功,還是返回的重復(fù)數(shù)據(jù),這在傳統(tǒng)的linq to sql中是可以的,但在linq to entity中是不行的,因?yàn)樗鼈兩蒘QL語句的內(nèi)核不同
正確的一對(duì)一做法
join data in new TsingDa_NewLearningBarRepository<FAQ_Reply>(UnitWork).GetModel().Where(i => i.Status == (int)Status.Normal)on r.FAQInfoID equals data.FAQInfoID into listselect new FAQ_Info_Ext(){FAQReply = list.OrderByDescending(i => i.AddTime).FirstOrDefault()}我們可以看到,它的巧妙是在數(shù)據(jù)賦值上...
看一個(gè)數(shù)據(jù)庫的監(jiān)控
剛看到后,真是下了我一大跳,怎么連了這么多庫呀,暈,然后,本地設(shè)斷點(diǎn)調(diào)試了一下,原來和我的代碼沒有關(guān)系,是其它代碼惹的禍!
我的代碼運(yùn)行是這樣的
這是可以接受的,在我的預(yù)料之中,呵呵。
回到目錄
總結(jié)
以上是生活随笔為你收集整理的EF架构~LinqToEntity里实现left join的一对一与一对多的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OSPF的LSA类型~
- 下一篇: Cocos2d-x编程中CCRemove