NHibernate, consulta de suma
-
09-06-2019 - |
Pregunta
Si tengo definida una consulta con nombre simple, realiza una función de recuento, en una columna:
<query name="Activity.GetAllMiles">
<![CDATA[
select sum(Distance) from Activity
]]>
</query>
¿Cómo obtengo el resultado de una suma o cualquier consulta que no devuelva una de las entidades asignadas, con NHibernate usando IQuery o ICriteria?
Aquí está mi intento (no puedo probarlo en este momento), ¿funcionaría?
public decimal Find(String namedQuery)
{
using (ISession session = NHibernateHelper.OpenSession())
{
IQuery query = session.GetNamedQuery(namedQuery);
return query.UniqueResult<decimal>();
}
}
Solución 2
¡Lo siento!En realidad quería una suma, no un recuento, lo que explica muchas cosas.He editado la publicación en consecuencia.
Esto funciona bien:
var criteria = session.CreateCriteria(typeof(Activity))
.SetProjection(Projections.Sum("Distance"));
return (double)criteria.UniqueResult();
El enfoque de consulta con nombre todavía muere, "Errores en consultas con nombre:{Actividad.GetAllMiles}":
using (ISession session = NHibernateHelper.OpenSession())
{
IQuery query = session.GetNamedQuery("Activity.GetAllMiles");
return query.UniqueResult<double>();
}
Otros consejos
Como respuesta indirecta a su pregunta, así es como lo hago sin una consulta con nombre.
var session = GetSession();
var criteria = session.CreateCriteria(typeof(Order))
.Add(Restrictions.Eq("Product", product))
.SetProjection(Projections.CountDistinct("Price"));
return (int) criteria.UniqueResult();
Creo que en tu ejemplo original, solo necesitas query.UniqueResult();el recuento devolverá un número entero.