linq扩展方法

1.动态排序

 public static IQueryable<T> Sort<T>(this IQueryable<T> source, string sort)
        {
            string sortStr = "";
            string sortDirection = "";
            string sortDir = string.Empty;
            if(!string.IsNullOrEmpty(sort))
            {
                sortStr = sort.Split('-')[0];//排序字段
                sortDirection = sort.Split('-')[1];//方向
            }
            if (sortDirection.Trim().ToUpper() == "ASC")
            {
                sortDir = "OrderBy";
            }
            else
            {
                sortDir = "OrderByDescending";
            }
            ParameterExpression param = Expression.Parameter(typeof(T), sortStr);
            PropertyInfo pi = typeof(T).GetProperty(sortStr);
            Type[] types = new Type[2];
            types[0] = typeof(T);
            types[1] = pi.PropertyType;
            Expression expr = Expression.Call(typeof(Queryable), sortDir, types, source.Expression, Expression.Lambda(Expression.Property(param, sortStr), param));
            IQueryable<T> query = source.AsQueryable().Provider.CreateQuery<T>(expr);
            return query;
        }

2.分页

2.1扩展基础类

    [Serializable]
    public class PagedList<T> : List<T>
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="source">数据源</param>
        /// <param name="pageIndex">页码,从0开始</param>
        /// <param name="pageSize">每页显示数量</param>
        public PagedList(IQueryable<T> source, int pageIndex, int pageSize)
        {
            int total = source.Count();
            TotalCount = total;
            TotalPages = total / PageSize;

            if (total % pageSize > 0)
            {
                TotalPages++;
            }
            PageSize = pageSize;
            this.PageIndex = pageIndex;
            AddRange(source.Skip(pageIndex * pageSize).Take(pageSize).ToList());
        }

        public PagedList(IEnumerable<T> source, int pageIndex, int pageSize)
        {
            int total = source.Count();
            TotalCount = total;
            TotalPages = total / PageSize;

            if (total % pageSize > 0)
            {
                TotalPages++;
            }
            PageSize = pageSize;
            this.PageIndex = pageIndex;
            AddRange(source);
        }

        public PagedList(IList<T> source, int pageIndex, int pageSize)
        {
            int total = source.Count;
            TotalCount = total;
            TotalPages = total / PageSize;

            if (total % pageSize > 0)
            {
                TotalPages++;
            }
            PageSize = pageSize;
            this.PageIndex = pageIndex;
            AddRange(source);
        }

        /// <summary>
        /// 页码索引
        /// </summary>
        public int PageIndex { get; private set; }

        /// <summary>
        /// 每页显示记录数
        /// </summary>
        public int PageSize { get; private set; }

        /// <summary>
        /// 总记录
        /// </summary>
        public int TotalCount { get; private set; }

        /// <summary>
        /// 总页数
        /// </summary>
        public int TotalPages { get; private set; }

        /// <summary>
        /// 上一页?
        /// </summary>
        public bool HasPrePage
        {
            get { return (PageIndex > 0); }
        }

        /// <summary>
        /// 下一页
        /// </summary>
        public bool HasNextPage
        {
            get { return (PageIndex + 1 < TotalPages); }
        }
    }

2.2扩展方法

  public static PagedList<T> ToPagedList<T>(this IQueryable<T> soruce, int pageIndex, int pageSize)
        {
            return new PagedList<T>(soruce,pageIndex,pageSize);
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值