Hibernate, query di somma
-
09-06-2019 - |
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>();
}
}
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.