El uso de NHibernate para informar de una mesa con dos sumas
-
29-09-2019 - |
Pregunta
Tengo tres tablas: Personas, compras, pagos con las relaciones-1-a-muchos entre la gente y compras, y la gente y los pagos
.Quiero generar un informe de personas que muestran la suma de sus compras y pagos.
Me puede generar fácilmente un informe para todas las personas que muestran la suma de los pagos o compras, vis:
var query =
DetachedCriteria.For<People>("People")
.CreateAlias("Payments", "paymentsMade");
query.SetProjection(Projections.ProjectionList()
.Add(Projections.GroupProperty("Id"), "Id")
.Add(Projections.Sum("paymentsMade.Amount"), "TotalPayments")
¿Puedo hacer esto en una sola consulta en NHibernate? Ya sea usando el API criterios (preferido) o HQL.
Solución
intentar algo como esto:
var query = @"select
(select sum(pu.Amount) from Purchase pu where pu.People.Id = ppl.Id),
(select sum(pa.Amount) from Payments pa where pa.People.Id = ppl.Id)
from People ppl";
var results = session
.CreateQuery(query)
.List();
O tal vez usando ad-hoc de asignación :
public class BulkReport
{
public double Purchases { get; set; }
public double Payments { get; set; }
}
var results = session
.CreateQuery(query)
.SetResultTransformer(Transformers.AliasToBean(typeof(BulkReport)))
.List<BulkReport>();
Otra opción sería utilizar MultiQueries .
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow