我需要一些帮助来在NHibernate中构建查询。
select cuenta.id, cuenta.descripcion
, si.debe debe_inicial, si.haber haber_inicial
, sp.debe debe_periodo, sp.haber haber_periodo
from cuenta
left join (
select idcuenta, sum(debe) debe, sum(haber) haber
from asientos
inner join ejercicio on ejercicio.id = asientos.idejercicio
where fecha <= '12/02/2015'
group by idcuenta
) si on si.idcuenta = cuenta.id
left join (
select idcuenta, sum(debe) debe, sum(haber) haber
from asientos
inner join ejercicio on ejercicio.id = asientos.idejercicio
where fecha > '12/02/2015' and ejercicio.id = 1
group by idcuenta
) sp on sp.idcuenta = cuenta.id
我分别写了两个子查询,结果是正确的。 但我不知道加入它的方法。
var query1 = session.QueryOver<Asientos>()
.Select(
Projections.Group<Asientos>(x => x.idCuenta)
, Projections.Sum<Asientos>(x => x.Debe)
, Projections.Sum<Asientos>(x => x.Haber)
)
.Where(x => x.Fecha <= "12/02/2015".ToDate())
.Inner.JoinQueryOver<Ejercicio>(x => x.Ejercicio)
.Where(x => x.Ejercicio.id = 1)
.TransformUsing(NHibernate.Transform.Transformers.AliasToBean(typeof(TestDTO)))
.List<TestDTO>();
var query2 = session.QueryOver<Asientos>()
.Select(
Projections.Group<Asientos>(x => x.idCuenta)
, Projections.Sum<Asientos>(x => x.Debe)
, Projections.Sum<Asientos>(x => x.Haber)
)
.Where(x => x.Fecha > "12/02/2015".ToDate())
.Inner.JoinQueryOver<Ejercicio>(x => x.Ejercicio)
.Where(x => x.Ejercicio.id = 1)
.TransformUsing(NHibernate.Transform.Transformers.AliasToBean(typeof(TestDTO)))
.List<TestDTO>();
可以执行此查询,因为我已经看到许多需要更多复杂性的查询非常困难或不可能