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>();
        }
    }
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top