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();即可。该计数将返回一个整数。