NHibernate, Sum Query
-
09-06-2019 - |
Vra
As ek 'n eenvoudige vernoem navraag gedefinieer, die vir vorm 'n telling funksie, op een kolom:
<query name="Activity.GetAllMiles">
<![CDATA[
select sum(Distance) from Activity
]]>
</query>
Hoe kry ek die uitslag van 'n som of enige navraag wat terugkeer van een van die gekarteer entiteite hoef, met NHibernate die gebruik van óf IQuery of ICriteria?
Hier is my poging (im nie in staat om dit nou te toets), sou hierdie werk?
public decimal Find(String namedQuery)
{
using (ISession session = NHibernateHelper.OpenSession())
{
IQuery query = session.GetNamedQuery(namedQuery);
return query.UniqueResult<decimal>();
}
}
Oplossing 2
Jammer! Ek wou eintlik 'n som, nie 'n telling, wat baie verduidelik. Iv geredigeer die post dienooreenkomstig
Dit werk goed:
var criteria = session.CreateCriteria(typeof(Activity))
.SetProjection(Projections.Sum("Distance"));
return (double)criteria.UniqueResult();
Die naam van navraag benadering nog sterf, "Foute in die naam van navrae: {Activity.GetAllMiles}":
using (ISession session = NHibernateHelper.OpenSession())
{
IQuery query = session.GetNamedQuery("Activity.GetAllMiles");
return query.UniqueResult<double>();
}
Ander wenke
As 'n indirekte antwoord op jou vraag, hier is hoe ek dit doen sonder 'n naam van navraag.
var session = GetSession();
var criteria = session.CreateCriteria(typeof(Order))
.Add(Restrictions.Eq("Product", product))
.SetProjection(Projections.CountDistinct("Price"));
return (int) criteria.UniqueResult();
Ek dink in jou oorspronklike voorbeeld, jy hoef net te na query.UniqueResult (); die telling sal 'n heelgetal terugkeer.