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>();
        }
    }
Was dit nuttig?

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.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top