zoukankan      html  css  js  c++  java
  • MVC分页控件之二,为IQueryable定义一个扩展方法,直接反回PagedList<T>结果集(转)

    namespace Entity
    {
        public interface IPagedList
        {
            /// <summary>
            /// 记录数
            /// </summary>
            int TotalCount { get; set; }
            /// <summary>
            /// 页数
            /// </summary>
            int TotalPages { get; set; }
            /// <summary>
            /// 当前页
            /// </summary>
            int PageIndex { get; set; }
            /// <summary>
            /// 页面大小
            /// </summary>
            int PageSize { get; set; }
            /// <summary>
            /// 是否上一页
            /// </summary>
            bool IsPreviousPage { get; }
            /// <summary>
            /// 是否下一页
            /// </summary>
            bool IsNextPage { get; }
        }
        /// <summary>
        /// 分页通用类
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public class PagedList<T> : List<T>, IPagedList
        {
            /// <summary>
            /// 数据源为IQueryable的范型
            /// </summary>
            /// <param name="source">数据源</param>
            /// <param name="index">当前页</param>
            /// <param name="pageSize">每页显示多少条记录</param>
            public PagedList(IQueryable<T> source, int index, int pageSize)
            {
                if (source != null) //判断传过来的实体集是否为空
                {
                    int total = source.Count();
                    this.TotalCount = total;
                    this.TotalPages = total / pageSize;
    
                    if (total % pageSize > 0)
                        TotalPages++;
    
                    this.PageSize = pageSize;
                    if (index > this.TotalPages)
                    {
                        index = this.TotalPages;
                    }
                    if (index < 1)
                    {
                        index = 1;
                    }
                    this.PageIndex = index;
                    this.AddRange(source.Skip((index - 1) * pageSize).Take(pageSize).ToList()); //Skip是跳到第几页,Take返回多少条
                }
            }
    
            /// <summary>
            /// 总页数
            /// </summary>
            public int TotalPages { get; set; }
            /// <summary>
            /// 总记录数
            /// </summary>
            public int TotalCount { get; set; }
            /// <summary>
            /// 当前页
            /// </summary>
            public int PageIndex { get; set; }
            /// <summary>
            /// 每页显示多少条记录
            /// </summary>
            public int PageSize { get; set; }
            /// <summary>
            /// 是否有上一页
            /// </summary>
            public bool IsPreviousPage { get { return (PageIndex > 0); } }
            /// <summary>
            /// 是否有下一页
            /// </summary>
            public bool IsNextPage { get { return (PageIndex * PageSize) <= TotalCount; } }
    
            private NameValueCollection _AddParameters = new NameValueCollection();
            /// <summary>
            /// 分页参数
            /// </summary>
            public NameValueCollection AddParameters
            {
                get { return _AddParameters; }
                set { _AddParameters = value; }
            }
    
        }
    
        /// <summary>
        /// PagedList扩展类
        /// </summary>
        public static class ExtendPagedList
        {
            /// <summary>
            ///  返回PagedList<T>类型的IQueryable的扩展方法
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="linq"></param>
            /// <param name="pageIndex"></param>
            /// <param name="pageSize"></param>
            /// <returns></returns>
            public static PagedList<T> ToPagedList<T>(this IQueryable<T> linq, int pageIndex, int pageSize)
            {
                return new PagedList<T>(linq, pageIndex, pageSize);
            }
        }
    }
  • 相关阅读:
    BZOJ3670:[NOI2014]动物园(KMP)
    415. [HAOI2009] 旅行
    U10223 Cx大帝远征埃及
    U10206 Cx的治疗
    2741. [济南集训 2017] 掰巧克力
    复习题目汇总 over
    7-20 表达式转换(25 分)
    7-19 求链式线性表的倒数第K项(20 分)(单链表定义与尾插法)
    7-18 银行业务队列简单模拟(25 分)
    7-17 汉诺塔的非递归实现(25 分)(有待改进)
  • 原文地址:https://www.cnblogs.com/superfeeling/p/5049772.html
Copyright © 2011-2022 走看看