iqueryable介面是繼承自ienumerable的介面
iqueryable中有表示式樹, 這可以看作是它的乙個優勢。所以,使用iqueryable操作時,比如對資料的過濾,排序等操作, 這些都會先快取到表示式樹中。 當對資料庫操作真正發生時,它才會將表示式樹執行來獲取資料。這也就是說,比如選擇top 2兩行資料, 它會先在表示式樹中快取這個過濾取top2的操作。待到運算元據庫時,它就會在資料庫中篩選top 2資料。 => iqueryable 有延時載入機制, 它直接從資料庫中篩選資料.
ienumerable, 它對資料進行操作時,和iqueryable不同,它會事先把所有的資料從資料庫獲取,放到記憶體中。然後,在記憶體中對這些資料進行篩選操作,包括過濾,排序等. => ienumerable 在記憶體中對資料進行篩選
總結:iqueryable只是構建表示式樹,真正取資料的時候,再執行完整的sql,ienumerable直接通過第乙個條件直接從資料庫拿到資料放到記憶體,通過剩下的條件進行篩選。
原文位址:
IQueryable和IEnumerable的區別
在新的系統框架中,常會用到iqueryable和ienumerable這兩個介面,經過一段時間的接觸和學習,對於這兩種型別的區別有了初步的理解。我們先來看一下這兩種介面的定義 ienumerable介面 公開列舉器,該列舉器支援在指定型別的集合上進行簡單迭代。也就是說 實現了此介面的object,就...
IQueryable和IEnumerable的區別
在新的系統框架中,常會用到iqueryable和ienumerable這兩個介面,經過一段時間的接觸和學習,對於這兩種型別的區別有了初步的理解。我們先來看一下這兩種介面的定義 ienumerable介面 公開列舉器,該列舉器支援在指定型別的集合上進行簡單迭代。也就是說 實現了此介面的object,就...
IQueryable與IList差別之處
ilist ilist 會立即在記憶體裡建立持久資料,這就沒有實現 延期執行 deferred execution 如果被載入的實體有關聯實體 associations 此關聯實體不會被載入 既不立即載入,也不延遲載入 iqeurable iquerable 不會立即在記憶體裡建立持久資料,只有遍歷...