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

EF架(jia)構~在ef中支持IQueryable級別的Contains被翻譯(yi)成了Exists,性能可以接受!

回到目錄

Entityframeworks很聰明

不(bu)錯,非常不(bu)錯!ef里(li)的contains比(bi)linq to sql里(li)的contains有(you)了明(ming)顯(xian)的提升,事(shi)實上(shang),是在(zai)(zai)進(jin)行SQL語句(ju)翻(fan)(fan)譯上(shang)有(you)所提升,在(zai)(zai)linq to sql里(li)不(bu)支持(chi)iqueryable的contains集合(he)(he),它只支持(chi)本地(di)集合(he)(he)進(jin)行contains,而本地(di)集合(he)(he)的contains會(hui)被(bei).net翻(fan)(fan)譯成sql語句(ju)是where in (...),即集合(he)(he)有(you)多(duo)個(ge)元素,在(zai)(zai)in里(li)就會(hui)被(bei)列舉多(duo)少次(ci),這個(ge)在(zai)(zai)性能上(shang)是非常低下的,不(bu)提倡的,而且(qie)它還(huan)有(you)長(chang)度限制(zhi),最多(duo)本地(di)集合(he)(he)在(zai)(zai)linq to sql里(li)是2000多(duo)個(ge)元素。

ef在這點上表示不(bu)錯,它為了(le)(le)防(fang)止你使用(yong)低下的(de)查(cha)(cha)詢(xun),它杜絕你在linq語句中去ToList()對象,這是(shi)不(bu)錯的(de)選(xuan)擇,對于EF中的(de)contains的(de)用(yong)法,我們一(yi)般是(shi)分兩步,第一(yi)查(cha)(cha)詢(xun)出要列舉的(de)結果集,但不(bu)要ToList(),第二(er)是(shi)使用(yong)contains語句,當EF把它發到SQL端時,這個語句被(bei)翻譯成了(le)(le)exist,我們知道,這種查(cha)(cha)詢(xun)的(de)性能(neng)一(yi)定(ding)(ding)是(shi)比where in強的(de),不(bu)說SQL本(ben)身就說網絡(luo)傳輸,它也(ye)一(yi)定(ding)(ding)比前者省了(le)(le)不(bu)少,呵呵。

Entityframeworks中正確使用Contains語句的Demo

錯誤的
   var linq = (from data1 in GetUser().Where(i => i.UserID <= 50) select data1.UserID).ToList();

   var linq2 = GetUser_StudyRecord().Where(i => linq.Contains(i.UserID.Value)).ToList();
SQL語句截圖

正確的
 var linq = (from data1 in GetUser().Where(i => i.UserID <= 50) select data1.UserID);//IQueryable<int>,一個查詢計劃(hua)

 var linq2 = GetUser_StudyRecord().Where(i => linq.Contains(i.UserID.Value)).ToList();
SQL語句截圖

怎么樣,看了截圖,不說,你也(ye)知道哪個性能好了吧,呵(he)呵(he)!

回到目錄

posted @ 2013-12-04 13:50  張占嶺  閱讀(7415)  評論(4)    收藏  舉報