我有一个条件查询,用于显示结果页面。我还需要获取所有项目的总数。为了避免使用两个查询,一个用于分页结果,另一个用于计算数量(因为它们除了.AddOrder()之外完全相同)
public ICriteria StandardQuery {
get {
return NHibernateSesssionManager.GetSession.CreateCriteria<Person>.AddOrder("OrderProperty", Order.Desc);
}
public ICriteria CountQuery {
get{
return StandardQuery.SetProjection(Projections.Count("ID"));
}
显然,CountQuery出现了错误,提示"Column "dbo.Person.ordercolumn" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause."
这是有道理的,所以我想做类似于这样的事情。
public ICriteria CountQuery {
get{
return StandardQuery.RemoveOrders().SetProjection(Projections.Count("ID"));
}
有没有办法做到这样?这样我就可以避免出现两个重复的查询,一个用于分页,一个用于计数。显然,对任何一个查询的更改都需要在另一个查询上进行镜像操作,这是我不喜欢的风险。你会怎么做呢?