NHibernate查询与子查询连接

时间:2015-02-12 21:59:56

标签: c# nhibernate subquery left-join queryover

我需要一些帮助来在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>();

可以执行此查询,因为我已经看到许多需要更多复杂性的查询非常困难或不可能

0 个答案:

没有答案
相关问题