IEnumberable与IQueryable区别

IEnumberable与IQueryable 区别

	static void Main(string[] args)
        {
            int total = -1;

            List list1 = GetPageListByIEnumerable(s => s.vID > 5, s => s.vID, 5, 2, false, out total).ToList();
            Console.WriteLine("通过IEnumerable方式执行分页查询");
            foreach (T_Videos item in list1)
            {
                Console.WriteLine(item.vTitle);
            }

            List list2 = GetPageListByIQueryable(s => s.vID > 5, s => s.vID, 5, 2, false, out total).ToList();
            Console.WriteLine("通过IQueryable方式执行分页查询");
            foreach (T_Videos item in list2)
            {
                Console.WriteLine(item.vTitle);
            }
            Console.ReadLine();
        }



        #region 分页查询
        /// 
        /// IEnumerable分页查询
        /// 
        /// 集合的类型
        /// 按照Tkey类型排序
        /// 条件
        /// 排序
        /// 每页显示的条数
        /// 当前页
        /// 是否是升序
        /// 总条数
        /// 返回数据IEnumerable集合
        static IEnumerable GetPageListByIEnumerable(Func where, Func order, int pageSize,
            int pageIndex, bool isAsc, out int Total) where T : class
        {
            sirius_videoEntities context = new sirius_videoEntities();
            Total = context.Set().Select(s => s).Count();
            var result = context.Set().Where(where);
            result = isAsc == true ? result.OrderBy(order) : result.OrderByDescending(order);
            return result.Skip((pageIndex - 1) * pageSize).Take(pageSize).Select(s => s).ToList();
        }

        /// 
        /// IQueryable方式分页查询
        /// 
        /// 集合的类型
        /// 按照Tkey类型排序
        /// 条件
        /// 排序
        /// 每页显示的条数
        /// 当前页
        /// 是否是升序
        /// 总条数
        /// 返回数据IQueryable集合
        static IQueryable GetPageListByIQueryable(Expression> where, Expression> order, int pageSize,
            int pageIndex, bool isAsc, out int Total) where T : class
        {
            sirius_videoEntities context = new sirius_videoEntities();
            Total = context.Set().Select(s => s).Count();
            var result = context.Set().Where(where);
            result = isAsc == true ? result.OrderBy(order) : result.OrderByDescending(order);
            return result.Skip((pageIndex - 1) * pageSize).Take(pageSize).Select(s => s);
        }
我们先将IQueryable的方式注释掉运行程序在 SQL Server Profiler中看下跟踪结果
IEnumberable与IQueryable区别_第1张图片
我们再将IEnumerable的方式注释掉 将IQueryable取消注释运行程序在 SQL Server Profiler中看下跟踪结果
IEnumberable与IQueryable区别_第2张图片

通过两次的运行结果可以看出IEnumberable与IQueryable区别 IEnumerable在调用where()、orderby()之前已经将整个表读到了内存中之后再根据各个条件逐个过滤,而IQueryable是在执行SQL 命令前将所有条件拼接成一条SQL命令之后再在数据库中执行。

你可能感兴趣的:(小知识)