2012-01-20 96 views
11

我已閱讀了一些文章,指出IEnumerable用於模仿存儲過程或限制數據庫。在外部提供商上丟失了延遲加載能力。IQueryable與IEnumerable存儲庫模式,延遲加載

IQueryable爲開發者提供了更多的靈活性。延遲加載在那裏。

在性能方面,都會消耗大量的性能..所以哪一個更可取?

+1

一如既往......這取決於你究竟需要什麼...... –

回答

21

從Repository模式的角度來看,你可以認爲它是這樣的:

  1. 當你想整個列表傳遞給客戶一次性使用的預先加載IEnumerable。他們仍然可以添加linq子句,但客戶不會從延期執行中受益。

  2. 當您希望通過允許客戶端添加自己的linq子句來延長延遲查詢功能時,使用延遲加載IQueryable。這會推遲整個查詢的執行,直到需要輸出爲止。

另請參見
Deferred execution and eager evaluation

0

「的IEnumerable」和「IQueryable的」之間的主要區別是關於執行過濾器邏輯位置。一個在客戶端執行(在內存中),另一個在數據庫上執行。

因此,當查詢像List,Array等內存集合中的數據時,應該使用IEnumerable。

另一方面,從外存(如遠程數據庫,服務)集合查詢數據時,應使用IQueryable。

0

IEnumerable vs IQueryable

IQueryable的是最好的用於服務器端數據,而IEnumerable的是最適合的是在客戶端側使用陣列/列表。