NHibernate,求和查询

NHibernate,求和查询,nhibernate,hql,querying,Nhibernate,Hql,Querying,如果定义了一个简单的命名查询,则会在一列上执行计数函数: <query name="Activity.GetAllMiles"> <![CDATA[ select sum(Distance) from Activity ]]> </query> 如果NHibernate使用IQuery或ICriteria,那么如何获得不返回一个映射实体的求和或任何查询的结果 这是我的尝试(我现在无法测试),这是否有效 pub

如果定义了一个简单的命名查询,则会在一列上执行计数函数:

  <query name="Activity.GetAllMiles">
    <![CDATA[
      select sum(Distance) from Activity
    ]]>

  </query>

如果NHibernate使用IQuery或ICriteria,那么如何获得不返回一个映射实体的求和或任何查询的结果

这是我的尝试(我现在无法测试),这是否有效

    public decimal Find(String namedQuery)
    {
        using (ISession session = NHibernateHelper.OpenSession())
        {
            IQuery query = session.GetNamedQuery(namedQuery);


            return query.UniqueResult<decimal>();
        }
    }
公共十进制查找(字符串名称查询)
{
使用(ISession session=NHibernateHelper.OpenSession())
{
IQuery=session.GetNamedQuery(namedQuery);
返回query.UniqueResult();
}
}

作为对您问题的间接回答,以下是我如何在不使用命名查询的情况下执行此操作

var session = GetSession();
var criteria = session.CreateCriteria(typeof(Order))
            .Add(Restrictions.Eq("Product", product))
            .SetProjection(Projections.CountDistinct("Price"));
return (int) criteria.UniqueResult();

对不起!事实上,我想要的是一个总数,而不是一个计数,这解释了很多。我据此编辑了这篇文章

这很好:

var criteria = session.CreateCriteria(typeof(Activity))
                          .SetProjection(Projections.Sum("Distance"));
   return (double)criteria.UniqueResult();
命名查询方法仍然失效,“命名查询中的错误:{Activity.GetAllMiles}”:

使用(ISession session=NHibernateHelper.OpenSession())
{
IQuery=session.GetNamedQuery(“Activity.GetAllMiles”);
返回query.UniqueResult();
}

我认为在您最初的示例中,您只需要查询.UniqueResult();计数将返回一个整数

 using (ISession session = NHibernateHelper.OpenSession())
            {
                IQuery query = session.GetNamedQuery("Activity.GetAllMiles");


                return query.UniqueResult<double>();
            }