• Nhibernate Icreteria 分页查询


    1、创建查询条件,条件为一个ICreterion的列表

            ///
            /// 创建Criteria(不含order,因为获取总数的时候,为了性能考虑,不加order)
            ///
            /// 类型
            /// ICriterion列表
            ///
            public ICriteria CreateCriteria(Type t, List list)
            {
                ICriteria criteria = Session.CreateCriteria(t);

                if (list != null && list.Count > 0)
                {
                    foreach (ICriterion c in list)
                    {
                        criteria.Add(c);
                    }
                }

                return criteria;
            }

    2、分页查询

            ///
            ///获取排序的pageInfo
            ///
            /// 类型
            /// ICriterion列表
            /// 升序?true:false
            /// 排序字段
            ///
            public PageInfo getOrderdPagedListByCriteria(PageInfo pageInfo,Type t, List list, bool isAsc, string orderBy)
            {
               ICriteria c= CreateCriteria(t, list);//拼接查询条件

               int startNum = pageInfo.CurrentPage * pageInfo.PageSize;

    //创建一个同样的ICriteria对象,不然执行总数查询之后,ICriteria的条件依然还是总数查询,下边的结果查询会出错。

               ICriteria pageCriteria = CriteriaTransformer.Clone(c);

    //执行结果查询,Projections对象会投影到一个新的查询,包含AVG、sum、count等等
               pageInfo.RowCount = int.Parse(pageCriteria.SetProjection(Projections.RowCount()).UniqueResult().ToString());

    //执行完总数查询之后,就给之前的ICriteria对象创建排序规则

               if (isAsc)
                   c.AddOrder(new Order(orderBy, true));
               else
                   c.AddOrder(new Order(orderBy, false));

    //创建完排序规则之后,执行数据查询
               pageInfo.Results = c.SetFirstResult(startNum).SetMaxResults(pageInfo.PageSize).List().ToList();

               return pageInfo;
            }

    注:PageInfo是一个分页类

     ///
            /// 结果
            ///
            public List Results { get; set; }

            ///
            /// 当前页码
            ///
            public int CurrentPage { get; set; }

            ///
            /// 页总数(一共有多少页)
            ///
            public int PageCount
            {
                get
                {
                    if (RowCount == 0)
                    {
                        return 1;
                    }
                    else
                    {
                        return (int)Math.Ceiling(RowCount / (double)PageSize);
                    }
                }
                private set
                {
                    this.PageCount = value;
                }
            }

            ///
            /// 总记录数
            ///
            public int RowCount { get; set; }

            ///
            /// 每页记录数
            ///
            private int pagesize;
            public int PageSize
            {
                get { return pagesize; }
                set { pagesize = value; }
            }

                
        }

  • 相关阅读:
    android选择时间攻略
    安卓通知的基本用法
    个人作业----软件工程实践总结
    第三次作业——《K米评测》
    第二次结对编程作业——毕设导师智能匹配
    原型设计与需求分析
    作品调研
    软件工程的实践项目课程的自我目标
    软件工程实践总结作业20161231
    K米测试
  • 原文地址:https://www.cnblogs.com/elim/p/4277310.html
Copyright © 2020-2023  润新知