2

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

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

3 回答 3

4

作为对您问题的间接回答,以下是我在没有命名查询的情况下如何做到的。

var session = GetSession();
var criteria = session.CreateCriteria(typeof(Order))
            .Add(Restrictions.Eq("Product", product))
            .SetProjection(Projections.CountDistinct("Price"));
return (int) criteria.UniqueResult();
于 2008-09-15T22:38:03.480 回答
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>();
            }
于 2008-09-17T15:17:24.097 回答
0

我认为在你原来的例子中,你只需要 query.UniqueResult(); 计数将返回一个整数。

于 2008-09-17T15:23:36.533 回答