2008-09-15 85 views
2

如果我已经定义了一个简单的命名查询,预制件计数功能,在一列:NHibernate的,总查询

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

    </query> 

如何获得一笔或查询的是不要一个返回的结果映射的实体,与NHibernate使用Either IQuery或ICriteria?

这是我的尝试(即时无法测试它),这会工作吗?

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


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

回答

2

对不起!我其实需要一笔钱,而不是一个数字,这很好解释了这一点。四,编辑岗位相应

这工作得很好:

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

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

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

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