2、IQueryable 接口數據庫
提供對未指定數據類型的特定數據源的查詢並進行計算的功能。public interface IQueryable : IEnumerable緩存
它繼承 IEnumerable 接口,.net版本加入Linq和IQueryable後,使得IEnumerable再也不那麼單調,變得更增強大和豐富。ide
3、爲了區分兩者的區別,代碼參考:ui
#region 數據列表 /// <summary> /// 數據列表 /// </summary> /// <returns></returns> public ActionResult List() { //IQueryable IQueryable<StudentModel> userlistIQue = (from u in db.Student orderby u.id select u).Skip<StudentModel>(1).Take<StudentModel>(2); //IEnumerable IEnumerable<StudentModel> userlistIEnu = (from u in myteref.m_user orderby u.id select u).AsEnumerable<StudentModel>().Skip<StudentModel>(1).Take<StudentModel>(2); int i = 0; foreach (var c in studentlistIQue) { i++; } Console.WriteLine(i); foreach (var c in studentlistIEnu) { i++; } Console.WriteLine(i); return View(); } #endregion
4、總結:lua
IEnumerable查詢必須在本地執行.而且執行查詢前咱們必須把全部的數據加載到本地.並且更多的時候.加載的數據有大量的數據是咱們不須要的無效數據.可是咱們卻不得不傳輸更多的數據。
使用IEnumerable,全部對於IEnumerable的過濾,排序等操做,都是在內存中發生的。也就是說數據從數據庫中獲取放到到了內存中,而後在內存中進行過濾和排序操做。
IQueryable卻總能只提供你所須要的數 據.大大減小了數據的傳輸
IQueryable的優點是它有表達式樹,全部對於IQueryable的過濾,排序等操做,都會先緩存到表達式樹中,只有當真正遍歷發生的時候,纔會將表達式樹由IQueryProvider執行獲取數據操做。spa