2008-09-15 15 views
2

i bir sütun üzerinde tanımlı basit adlandırılmış sorgu preform bir sayım fonksiyonu, varsa:NHibernate, Sum Sorgu

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

    </query> 

Ben birinin dönüşü yok toplam veya herhangi bir sorgu sonucunu nasıl alabilirim Eşleştirilen varlıklar, Ya IQuery veya ICriteria kullanarak NHibernate ile?

İşte benim denemem (şu anda test edemiyorum), bu işe yarar mı?

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


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

cevap

2

Üzgünüz! Aslında bir çok şeyi açıklayan bir sayı istemedim.

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

adlı sorgu yaklaşım hala ölür: Iv buna göre

Bu iyi çalışır gönderiyi düzenledi "adlı sorgularda Hatalar: {Activity.GetAllMiles}": Ben düşünüyorum

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


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

Sorunuza dolaylı bir yanıt olarak, burada, adlandırılmış bir sorgulama olmadan bunu nasıl yaparım.

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

Orijinal örneğiniz, sadece sorgulamaya ihtiyacınız var.UniqueResult(); sayım bir tam sayı döndürecektir.