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

}

Nhibernate Icreteria 分页查询的更多相关文章

  1. 基于jqgrid + ashx + nhibernate的分页

    因为我目前运维的是一个webform项目,项目中未用到分页的功能,我百度了很多文章也没有一篇是结合jqgrid + ashx + nhibernate的分页,可能是因为后台要请求ashx的原因,不像m ...

  2. JdbcTemplate+PageImpl实现多表分页查询

    一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...

  3. 用Hibernate和Struts2+jsp实现分页查询、修改删除

    1.首先用get的方法传递一个页数过去 2.通过Struts2跳转到Action 3.通过request接受主页面index传过的页数,此时页数是1, 然后调用service层的方法获取DAO层分页查 ...

  4. MySQL、Oracle和SQL Server的分页查询语句

    假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: SELECT * FROM s ...

  5. 分页查询和分页缓存查询,List<Map<String, Object>>遍历和Map遍历

    分页查询 String sql = "返回所有符合条件记录的待分页SQL语句"; int start = (page - 1) * limit + 1; int end = pag ...

  6. mysql 分页查询

    mysql,; : mysql,; -last. //如果只给定一个参数,它表示返回最大的记录行数目: mysql; 个记录行 ,n. 动态传参的分页查询 SELECT * FROM table LI ...

  7. MongoDB 分页查询的方法及性能

    最近有点忙,本来有好多东西可以总结,Redis系列其实还应该有四.五.六...不过<Redis in Action>还没读完,等读完再来总结,不然太水,对不起读者. 自从上次Redis之后 ...

  8. .NET平台开源项目速览(7)关于NoSQL数据库LiteDB的分页查询解决过程

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑) 与 .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB中,介绍了LiteDB的基本使用情况以及部 ...

  9. SubSonic3.0插件分页查询速度测试

    使用SubSonic3.0一段时间了,一直都想找机会测试一下各种查询分页速度,对比一下插件的查询效率到底怎么样,所以昨天写好了测试程序,准备好1K.1W.10W.50W和100W记录的数据表,早上详细 ...

随机推荐

  1. [JQuery]选择器详解

      示例 说明 $(this) 当前元素 $("p") 所有<p>元素 $("input") 所有input元素 $(".intro&qu ...

  2. hdu 4358 Boring counting 离散化+dfs序+莫队算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4358 题意:以1为根节点含有N(N <= 1e5)个结点的树,每个节点有一个权值(weight ...

  3. hdu 5646 DZY Loves Partition 二分+数学分析+递推

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5646 题意:将n分成k个正整数之和,要求k个数全部相同:并且这k个数的乘积最大为多少?结果mod 1e^9 ...

  4. CMOS (1)–PMOS与NMOS

    1,名称来源 p,n指示的是生成的沟道类型 2,驱动逻辑0与逻辑1 一般用NMOS驱动逻辑0,用PMOS驱动逻辑1.

  5. <三> SQL 基础

    SQL查询的一般形式,以及被逻辑处理的顺序 (8) select (9) distinct (11) <TOP_specification> <select_list> (1) ...

  6. Memcached(七)Memcached的并发实例

    1. Memcached是什么?Memcached是分布式的内存对象缓存系统.  2. Memcached的基本数据结构是什么?Memcached是基于Key/Value对的HashMap.每一对,都 ...

  7. CentOS PPTP配置LNMP+PPTP+FreeRADIUS+DaloRADIUS+流量控制

    折腾了好几天,查阅了很多资料,终于搞定了,泪牛满面,下面记录详细操作过程!注:测试环境为CENTOS5.8 x86 安装PPTP 直接使用赵蓉的PPTP一键安装包即可 wget http://dl.z ...

  8. PHP与最丑的后台管理系统

    第二天阿Q到公司还是比较早,同事只有阿梅在,阿Q坐在椅子上旋转来旋转去,有点像个小孩子.公司有书柜,书柜上放了好几本很新的php的书,.net的书反倒比较少而且显得老旧.阿Q起身走过去拿了本php翻了 ...

  9. oracle删除表的方法

    1. 删除oracle表中的所有数据而不删除表: 语法: TRUNCATE TABLE table_name; 使用这条语句只是删除表中的全部数据,不是删除表,这种方式也叫做截断表,这种方式比使用de ...

  10. Ubuntu 14.04 开启启动器图标最小化功能

    转自Ubuntu 14.04 怎样开启启动器图标最小化功能 前本站报道过 Ubuntu 14.04 终于加入了启动器图标最小化功能,这个功能默认是不开启的,要怎么开启呢? 之前报道的原文阅读:Ubun ...