gpt4 book ai didi

nhibernate - 从 NHibernate 标准查询中删除订单

转载 作者:行者123 更新时间:2023-12-03 19:39:06 24 4
gpt4 key购买 nike

我有一个用于显示结果页面的条件查询。我还需要获取所有项目的总数。而不是有两个查询,一个用于对结果进行分页,一个用于计数(因为除了 .AddOrder() 之外,它们是相同的

public ICriteria StandardQuery {
get {
return NHibernateSesssionManager.GetSession.CreateCriteria<Person>.AddOrder("OrderProperty", Order.Desc);
}

public ICriteria CountQuery {
get{
return StandardQuery.SetProjection(Projections.Count("ID"));
}

显然,带有“列“dbo.Person.ordercolumn”的 CountQuery barfs 在 ORDER BY 子句中无效,因为它不包含在聚合函数或 GROUP BY 子句中。

这是有道理的,所以基本上我想做这样的事情。
public ICriteria CountQuery {
get{
return StandardQuery.RemoveOrders().SetProjection(Projections.Count("ID"));
}

有没有办法做这样的事情?这样我就避免了两次重复查询的“风险”,一个用于分页,一个用于计数。显然,对任一查询的任何更改都需要反射(reflect)在另一个查询上,这是我不喜欢的风险。你会怎么办?

最佳答案

有一种方法可以解决这个问题。不幸的是,它使用起来有点困惑。

    private ICriteria NewCount
{
get
{
ICriteria countQuery = (ICriteria) StandardQuery.Clone();
countQuery.ClearOrders();
return countQuery.SetProjection(Projections.Count("ID"));
}
}

不知道为什么 ClearOrders() 返回 void 而不是 ICriteria,但它有效!

关于nhibernate - 从 NHibernate 标准查询中删除订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1751422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com