EF 不同參數動態排序

 /// <summary>
        /// 根據不同參數動態排序
        /// </summary>
        /// <param name="condition">Lambda表達式</param>
        /// <param name="pageIndex">當前頁</param>
        /// <param name="pageSize">一頁條數</param>
        /// <param name="total">總條數</param>
        /// <param name="propertyName">需要排序的字段名</param>
        /// <param name="IsDESC">是否降序</param>
        /// <returns></returns>
        public static List<CusClass> GetEntity(Expression<Func<Customers_tb, bool>> condition, int pageIndex, int pageSize, out int total,out string message, string propertyName, bool IsDESC)
        {
            MyETLockContext DbContext = new MyETLockContext();
            //條件過濾
            var query = DbContext.Set<Customers_tb>().Where(condition);
            //創建表達式變量參數
            var parameter = Expression.Parameter(typeof(Customers_tb), "cus");
            //根據屬性名獲取屬性
            var property = typeof(Customers_tb).GetProperty(propertyName);
            if (property!=null)
            {
                //創建一個訪問屬性的表達式
                var propertyAccess = Expression.MakeMemberAccess(parameter, property);
                var orderByExp = Expression.Lambda(propertyAccess, parameter);
                string OrderName = IsDESC ? "OrderByDescending" : "OrderBy";
                MethodCallExpression resultExp = Expression.Call(typeof(Queryable), OrderName, new Type[] { typeof(Customers_tb), property.PropertyType }, query.Expression, Expression.Quote(orderByExp));
                query = query.Provider.CreateQuery<Customers_tb>(resultExp);
                total = query.Count();
                message = "成功";
                return query.Select(s => new CusClass
                {
                    Id = s.Id,
                    Name = s.Name,
                    AgentId = s.AgentId.HasValue ? s.AgentId.Value : 0
                })
                .Skip((pageIndex - 1) * pageSize)
                .Take(pageSize).ToList();
            }
            else
            {
                message="字段錯誤";
                total = 0;
                return null;
            }
           
        }
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章