zoukankan      html  css  js  c++  java
  • 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; }
            }

                
        }

  • 相关阅读:
    分享完整的项目工程目录结构
    2014年糯米网校
    高并发非自增ID如何设计?
    Asp.Net中使用Couchbase——Memcached缓存使用篇
    协作图(通信图)collaboration diagram
    解决java获取系统时间差8个小时 专题
    智言趣语
    Common class for judge IPV6 or IPV4
    判断参数是否符合要求的一个类
    Connection to https://dl-ssl.google.com refused的解决办法
  • 原文地址:https://www.cnblogs.com/elim/p/4277310.html
Copyright © 2011-2022 走看看