NHibernate, Sum Query
-
09-06-2019 - |
Question
Si j'ai une simple requête nommée définie, les préformes d'une fonction count, sur une colonne:
<query name="Activity.GetAllMiles">
<![CDATA[
select sum(Distance) from Activity
]]>
</query>
Comment puis-je obtenir le résultat d'une somme ou d'une requête qui ne renvoie pas l'une des entités mappées, avec NHibernate utilisant soit IQuery soit ICriteria?
Voici ma tentative (je suis incapable de le tester pour le moment), cela fonctionnerait-il?
public decimal Find(String namedQuery)
{
using (ISession session = NHibernateHelper.OpenSession())
{
IQuery query = session.GetNamedQuery(namedQuery);
return query.UniqueResult<decimal>();
}
}
La solution 2
Désolé! Je voulais en fait une somme, pas un compte, ce qui explique beaucoup. Iv a modifié le message en conséquence
Cela fonctionne bien:
var criteria = session.CreateCriteria(typeof(Activity))
.SetProjection(Projections.Sum("Distance"));
return (double)criteria.UniqueResult();
L'approche de la requête par nom meurt toujours, " Erreurs dans les requêtes nommées: {Activity.GetAllMiles} & ":
using (ISession session = NHibernateHelper.OpenSession())
{
IQuery query = session.GetNamedQuery("Activity.GetAllMiles");
return query.UniqueResult<double>();
}
Autres conseils
Pour répondre indirectement à votre question, voici comment je le fais sans requête nommée.
var session = GetSession();
var criteria = session.CreateCriteria(typeof(Order))
.Add(Restrictions.Eq("Product", product))
.SetProjection(Projections.CountDistinct("Price"));
return (int) criteria.UniqueResult();
Je pense que dans votre exemple initial, il vous suffit de lancer une requête.UniqueResult (); le nombre retournera un entier.