天天看點

IEnumerable vs IQueryable

        初學Entity Framework時,根本沒有意識到IQueryable。那時從資料庫查資料都是先把所有記錄取出來,放記憶體上,再對這些記憶體上的資料進行篩選。資料少的時候,這種方法也馬馬虎虎能用。但資料一多,性能問題突顯。

        IEnumberable 和 IQueryable的差異。

        來源:IEnumerable VS IQueryable

        IEnumberable适用于查詢記憶體中的集合資料。如List,Arrary,Linq to Object,Linq to Xml

        當它用于查詢資料庫中的資料時,過程如下:

  1. 在伺服器端(資料庫)執行查詢搜尋(不帶複雜的篩選條件)
  2. 将查到的資料載入到用戶端的記憶體中
  3. 對用戶端記憶體中的資料進行篩選

        因為IEnumerable不支援懶加載。

        IQueryable适用于查詢記憶體外的集合資料。如資料庫,Linq to Sql,Service

        當它用于查詢資料庫中的資料時,會将查詢和所有篩選都放在服務端(資料庫)完成。

        因為IQueryable支援懶加載。(是以适用于分頁的場景)