Domanda

Se ho definito una query con nome semplice, esegue una funzione di conteggio, su una colonna:

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

  </query>

Come posso ottenere il risultato di una somma o di qualsiasi query che non restituisce una delle entità mappate, con NHibernate che utilizza IQuery o ICriteria?

Ecco il mio tentativo (non posso testarlo in questo momento), funzionerebbe?

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


            return query.UniqueResult<decimal>();
        }
    }
È stato utile?

Soluzione 2

Scusa!In realtà volevo una somma, non un conteggio, il che spiega molte cose.Iv ha modificato il post di conseguenza

Funziona bene:

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

L'approccio alle query denominate continua a morire: "Errori nelle query denominate:{Activity.GetAllMiles}":

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


                return query.UniqueResult<double>();
            }

Altri suggerimenti

Come risposta indiretta alla tua domanda, ecco come lo faccio senza una query denominata.

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

Penso che nel tuo esempio originale, devi solo eseguire query.UniqueResult();il conteggio restituirà un numero intero.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top