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; }
            }

                
        }

  • 相关阅读:
    Entity Framework版本历史概览
    Windows客户端C/C++编程规范“建议”——风格
    Bitbucket免费的私有仓库
    呵呵!手把手带你在 IIS 上运行 Python(转)
    RDLC系列之七 条码打印
    WCF 、Web API 、 WCF REST 和 Web Service 的区别
    使用DataAnnotations实现数据验证
    WPF:如何为程序添加splashScreen(初始屏幕)
    无法解析此远程名称: 'www.***.com' 解决办法 请求因 HTTP 状态 417 失败
    关于“服务器提交了协议冲突. Section=ResponseStatusLine"问题
  • 原文地址:https://www.cnblogs.com/elim/p/4277310.html
Copyright © 2011-2022 走看看