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>();
}