IQueryble IEnumerable是什麼關係有什麼區別,Linq查詢返回的是什麼型別的資料

時間 2021-05-30 20:10:54

1樓:林明基

要深入理解 IQueryble ,你需要自己拼一下 SQL ,當你需要拼的條件非常複雜,並且嘗試用 Expression 來代替 SQL 時,再擴充套件一下會發現你差不多實現乙個跟 IQueryable 非常接近的玩意。

2樓:無以言

介面的區別自己實現一下就知道了。

linq語法是擴充套件方法的語法糖,就是一組擴充套件方法的呼叫。不要學死板了,任何有類似方法的型別都能用linq,返回型別是方法定義的。你隨意定乙個普通型別,把where,select這些移過去試試就知道了。

3樓:

相同點:

兩個都可用LINQ來操作集合資料。

不同點:

IEnumerable一般用來操作本地記憶體中的資料,而IQuerable用來操作遠端資料(如資料庫)。

舉個例子:

從集合中取得名字叫「張三」的前5個員工:

var result = list.Where(r => r.Name == "張三").Take(5);

如果list是IEnumerable型別,那麼Take將在客戶端執行,也就是Where過濾的資料全載入到本地記憶體後,再取前5個。

而如果list是IQuerable型別,那麼上述語句將發生在遠端資料庫中,客戶端最後記憶體中只會有5個物件。

對於遠端資料來源,使用IQuerable可顯著地提高效率,減少本地記憶體消耗。

4樓:moonlight

其實應該加上第三個介面IList。IQueryable和IEnumerable並非平級關係,前者繼承了後者。與IQueryable相提並論的應該是IList。

IQueryable的lambda其實就是拼表示式樹這種「資料結構」,而IList實際上面對的是委託。前者訪問的是某種資料來源(資料庫、檔案乃至web介面),後者訪問的是本地記憶體中的資料。

因此倉儲層其實不應該返回IEnumerable而應該是IList,否則返回乙個IQueryable而外層不知道,會導致嚴重的效能問題。

至於linq不過是lambda的語法糖。這裡要注意的是不要將linq to sql和linq to object擺在一起。前者是乙個微軟曾經推出的資料訪問層工具,和ef是兩套並行的產品,由微軟內部不同的兩個組分別維護,只不過後來廢棄掉統一了產品線而已。

其缺點是只支援sqlserver的dbfirst,但對c#的語法相對於ef來說支援得更多。

5樓:timchen44

簡單理解

IQueryble:只是構造了查詢樹,並沒有進行實際的查詢,當你訪問時才會去查詢

IEnumerable:資料集合,裡面已經包含了經過查詢後的資料集合

感性和暴力有什麼區別?兩者是什麼關係?

感性是感受力強,是對內的 自身的 暴力是行為過激,是對外的 施於他人或施於不被認同的自己的從失控的情緒到暴力的行為,需要乙個外化的過程。人腦是一套極其智慧型的系統。即遍乙個人的情緒已經失控,在執行暴力之前的一瞬間,他的潛意識也會飛快計算這麼做的後果 利害,考慮到社會規則 關係親疏 力量差距等多種因素...

「命」和「運」是什麼關係?有何聯絡和區別?

非實非非實 命和運的區別大致就是巨集觀經濟學和微觀經濟學的區別吧。命看起來比較簡單,但背後的原理其實非常複雜。需要超級的知識庫,還要天人合一的視角。運看起來比較複雜,但其實是相較有章可循的。微觀經濟學裡掌握了供需關係就能差不多理解整個微觀體系。運中你理解了運勢潮起潮落的規律,看清自身的位置,你也能過...

你和你的前任是什麼關係?

還在等,等不到就開啟新生活。找不到分界線,直接繼續寫吧。沒等到他。他和別人在一起了。沒什麼感覺了。時間久了,那種衝擊和疼痛都淡了鈍了。很多事情就不說了。記一下美好的回憶吧。美好的回憶是不能說的,說了之後感覺就不是我乙個人的了,會飛走。 子衿 沒有關係了,性格使然,他對我影響深遠,一些說不清道不明的東...