2

単純な名前付きクエリが定義されている場合、1 つの列でカウント関数がプリフォームされます。

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

  </query>

IQueryまたはICriteriaを使用してNHibernateを使用して、マップされたエンティティの1つを返さない合計またはクエリの結果を取得するにはどうすればよいですか?

これが私の試みです(今はテストできません)、これはうまくいきますか?

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


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

3 に答える 3

4

あなたの質問に対する間接的な回答として、名前付きクエリなしで行う方法を次に示します。

var session = GetSession();
var criteria = session.CreateCriteria(typeof(Order))
            .Add(Restrictions.Eq("Product", product))
            .SetProjection(Projections.CountDistinct("Price"));
return (int) criteria.UniqueResult();
于 2008-09-15T22:38:03.480 に答える
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>();
            }
于 2008-09-17T15:17:24.097 に答える
0

元の例では、 query.UniqueResult(); するだけでよいと思います。カウントは整数を返します。

于 2008-09-17T15:23:36.533 に答える