NHibernate,总和查询

时间:2020-03-05 18:54:05  来源:igfitidea点击:

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

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

解决方案

回答

作为我们问题的间接答案,这是我如何在没有命名查询的情况下执行此操作。

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

回答

对不起!我实际上想要的是一笔总和,而不是一笔,这可以解释很多。 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>();
            }

回答

我认为在原始示例中,我们只需要查询.UniqueResult();即可。该计数将返回一个整数。