1. 程式人生 > 其它 >IQueryable和IEnumerable的區別

IQueryable和IEnumerable的區別

IQueryable介面是繼承自IEnumerable的介面
IQueryable中有表示式樹, 這可以看作是它的一個優勢。所以,使用IQueryable操作時,比如對資料的過濾,排序等操作, 這些都會先快取到表示式樹中。 當對資料庫操作真正發生時,它才會將表示式樹執行來獲取資料。這也就是說,比如選擇top 2兩行資料, 它會先在表示式樹中快取這個過濾取top2的操作。待到操作資料庫時,它就會在資料庫中篩選top 2資料。 => IQueryable 有延時載入機制, 它直接從資料庫中篩選資料.
IEnumerable, 它對資料進行操作時,和IQueryable不同,它會事先把所有的資料從資料庫獲取,放到記憶體中。然後,在記憶體中對這些資料進行篩選操作,包括過濾,排序等. => IEnumerable 在記憶體中對資料進行篩選
總結:

IQueryable只是構建表示式樹,真正取資料的時候,再執行完整的SQL,IEnumerable直接通過第一個條件直接從資料庫拿到資料放到記憶體,通過剩下的條件進行篩選。