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

相关文章
相关标签/搜索