如果我定义了一个简单的命名查询,那么preforms就是一个count函数,在一列上:
<query name="Activity.GetAllMiles">
<![CDATA[
select sum(Distance) from Activity
]]>
</query>
如何使用NHibernate使用Either IQuery或ICriteria来获取总和或任何不返回映射实体的查询的结果?
这是我的尝试(我现在无法测试),这会有效吗?
public decimal Find(String namedQuery)
{
using (ISession session = NHibernateHelper.OpenSession())
{
IQuery query = session.GetNamedQuery(namedQuery);
return query.UniqueResult<decimal>();
}
}
答案 0 :(得分:4)
作为对您的问题的间接回答,这里是我如何在没有命名查询的情况下执行此操作。
var session = GetSession();
var criteria = session.CreateCriteria(typeof(Order))
.Add(Restrictions.Eq("Product", product))
.SetProjection(Projections.CountDistinct("Price"));
return (int) criteria.UniqueResult();
答案 1 :(得分:2)
抱歉!我实际上想要一个总和,而不是一个计数,这解释了很多。 Iv相应地编辑了帖子
这很好用:
var criteria = session.CreateCriteria(typeof(Activity))
.SetProjection(Projections.Sum("Distance"));
return (double)criteria.UniqueResult();
命名查询方法仍然存在,“命名查询中的错误:{Activity.GetAllMiles}”:
using (ISession session = NHibernateHelper.OpenSession())
{
IQuery query = session.GetNamedQuery("Activity.GetAllMiles");
return query.UniqueResult<double>();
}
答案 2 :(得分:0)
我认为在您的原始示例中,您只需要查询.UniqueResult();计数将返回一个整数。