NHibernate,求和查询

发布于 2024-07-04 21:40:35 字数 583 浏览 13 评论 0原文

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

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

If i have a simple named query defined, the preforms a count function, on one column:

  <query name="Activity.GetAllMiles">
    <![CDATA[
      select sum(Distance) from Activity
    ]]>

  </query>

How do I get the result of a sum or any query that dont return of one the mapped entities, with NHibernate using Either IQuery or ICriteria?

Here is my attempt (im unable to test it right now), would this work?

    public decimal Find(String namedQuery)
    {
        using (ISession session = NHibernateHelper.OpenSession())
        {
            IQuery query = session.GetNamedQuery(namedQuery);


            return query.UniqueResult<decimal>();
        }
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

笨死的猪 2024-07-11 21:40:35

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

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

As an indirect answer to your question, here is how I do it without a named query.

var session = GetSession();
var criteria = session.CreateCriteria(typeof(Order))
            .Add(Restrictions.Eq("Product", product))
            .SetProjection(Projections.CountDistinct("Price"));
return (int) criteria.UniqueResult();
风向决定发型 2024-07-11 21:40:35

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

I think in your original example, you just need to to query.UniqueResult(); the count will return an integer.

回忆追雨的时光 2024-07-11 21:40:35

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

Sorry! I actually wanted a sum, not a count, which explains alot. Iv edited the post accordingly

This works fine:

var criteria = session.CreateCriteria(typeof(Activity))
                          .SetProjection(Projections.Sum("Distance"));
   return (double)criteria.UniqueResult();

The named query approach still dies, "Errors in named queries: {Activity.GetAllMiles}":

 using (ISession session = NHibernateHelper.OpenSession())
            {
                IQuery query = session.GetNamedQuery("Activity.GetAllMiles");


                return query.UniqueResult<double>();
            }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文