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