IQueryable 和IEnumberable的區別

1、 IEnumerable接口
公開枚舉器,該枚舉器支持在 指定類型的集合上進行簡單的迭代。即:實現了此接口的object,就可使用foreach遍歷該object;

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

相關文章
相關標籤/搜索