rea*_*ers 3 nhibernate criteria icriteria
我有一个标准查询,用于显示结果页面.我还需要获得所有项目的总数.而不是有两个查询,一个用于分页结果,一个用于计数(因为除了.AddOrder()之外它们是相同的
public ICriteria StandardQuery {
get {
return NHibernateSesssionManager.GetSession.CreateCriteria<Person>.AddOrder("OrderProperty", Order.Desc);
}
public ICriteria CountQuery {
get{
return StandardQuery.SetProjection(Projections.Count("ID"));
}
Run Code Online (Sandbox Code Playgroud)
显然,带有"Column"dbo.Person.ordercolumn"的CountQuery barf在ORDER BY子句中无效,因为它不包含在聚合函数或GROUP BY子句中."
这是有道理的,所以基本上我想做这样的事情.
public ICriteria CountQuery {
get{
return StandardQuery.RemoveOrders().SetProjection(Projections.Count("ID"));
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做这样的事情?因此,我保存了两个重复查询的"风险",一个用于分页,另一个用于计数.显然,对任一查询的任何更改都需要在另一方面进行镜像,这是我不喜欢的风险.你会怎么做?
确切地说,这是一种方法.不幸的是它使用起来有点乱.
private ICriteria NewCount
{
get
{
ICriteria countQuery = (ICriteria) StandardQuery.Clone();
countQuery.ClearOrders();
return countQuery.SetProjection(Projections.Count("ID"));
}
}
Run Code Online (Sandbox Code Playgroud)
不知道为什么ClearOrders()返回void而不是ICriteria,但是它有效!
| 归档时间: |
|
| 查看次数: |
1631 次 |
| 最近记录: |