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

}

最新文章

  1. 浅析 Linux 初始化 init 系统
  2. Unreleased Resource(未释放资源)-Streams(流)
  3. 10天学会phpWeChat——第三天:从数据库读取数据到视图
  4. html5+css 图片自适应
  5. 如何成为一个Xamarin专家
  6. 浅析基层检察院派驻乡镇检察室的健康发展 z
  7. C++编写ATM(1)
  8. arry()数组的理解及api的使用(二)
  9. 面试题-Java Web-Servlet部分
  10. js全选与反选
  11. java中log4j学习笔记
  12. Android Studio工程项目打包成SDK(jar或aar格式)
  13. VS2013 切换用户
  14. [osgearth][原]仿照谷歌,修改oe漫游器中focal(视角切换)功能
  15. Java中如何正确的将byte[]数组转化为String类型?
  16. Telnet 工具远程连接服务器
  17. 什么是RESTfull?理解RESTfull架构【转】
  18. 次讲解js中的回收机制是怎么一回事。
  19. Linux学习总结(一) windos环境vmware安装centos7
  20. poj2676 (dfs+回溯)

热门文章

  1. js模拟苹果菜单
  2. C#方法解析
  3. MongoDB入门三步曲2--基本操作(续)--聚合、索引、游标及mapReduce
  4. 如何配置SSH Keys登录
  5. Python 中模块间全局变量的使用上的注意
  6. python获取系统时间
  7. jcom2在win7 X86上操作Excel
  8. Apple 如何知道你使用了私有API
  9. 关于如何学好游戏3D引擎编程的一些经验[转]
  10. Classifying plankton with deep neural networks