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.

¿Fue útil?

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
scroll top