【问题标题】:NHibernate, Sum QueryNHibernate,求和查询
【发布时间】:2010-09-09 01:36:54
【问题描述】:

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

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

【问题讨论】:

    标签: nhibernate hql querying


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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>();
                  }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-09
          • 2010-12-04
          • 1970-01-01
          • 2011-02-27
          • 1970-01-01
          • 2020-11-12
          • 1970-01-01
          相关资源
          最近更新 更多