Как использовать SUM в NHibernate HQL?

Я пытаюсь SUMиспользовать HQL NHibernate, но при выполнении запроса возникает исключениеA first chance exception of type 'NHibernate.Exceptions.GenericADOException' occurred in NHibernate.dll, и результат не возвращается. Как я мог это сделать ?

пытаясь.

public IList<Conta> findAllContasReceber() {
            ISession _session = getSession();
            IList<Conta> list = _session.CreateQuery("SELECT SUM(c.valorFinal) " + 
                                                     "FROM Conta c " + 
                                                     "WHERE (c.tipoConta = 1) AND (c.status = 0) " + 
                                                     "GROUP BY c.dtVencimento, c.cliente " + 
                                                     "ÖRDER BY c.dtVencimento ASC "
                                                     )                
                .List<Conta>();
            return list;
        }

Сущность

[Serializable]
    public class Conta {

        public virtual long id                      { set; get; }        
        public virtual Cliente cliente              { set; get; }
        public virtual String historico             { set; get; }
        public virtual DateTime dtLancamento        { set; get; }
        public virtual DateTime dtVencimento        { set; get; }
        public virtual decimal valorPagar           { set; get; } //total vendas
        public virtual decimal valorAcrescimo       { set; get; } //total acrescimo
        public virtual decimal valorFinal           { set; get; } //total pagar

        public virtual DateTime dtPagamento         { set; get; }
        public virtual int tipoConta                { set; get; }  //1 receber, 2 pagar
        public virtual PlanoDeConta planoConta      { set; get; }
        public virtual int status                   { set; get; } //0 ativa, 1 fechada, 2 cancelada, 3 aguardando pagamento
        public virtual Venda venda                  { set; get; }


        public Conta() {

        }
    }

1 ответ

  1. Разрешенный. После поиска много предложений я нашел способ сделать то, что я хотел сделать.

    Вот решение.

    public IList<Conta> findAllContasReceber() {
                ISession _session = getSession();
                String SQL = "SELECT new Conta(c.cliente, c.historico, c.dtLancamento, c.dtVencimento, SUM(c.valorPagar), SUM(c.valorAcrescimo), SUM(c.valorFinal), c.status) " + 
                             "FROM Conta c WHERE (c.tipoConta = 1) AND (c.status = 0) " + 
                             "GROUP BY c.cliente, c.dtVencimento " + 
                             "ORDER BY c.dtVencimento ";
                IList<Conta> list = _session.CreateQuery(SQL).List<Conta>();
                return list;
            }
    

    Затем я создал конструктор в классе Conta для получения параметров

    [Serializable]
        public class Conta {
    
            public virtual long id                      { set; get; }        
            public virtual Cliente cliente              { set; get; }
            public virtual String historico             { set; get; }
            public virtual DateTime dtLancamento        { set; get; }
            public virtual DateTime dtVencimento        { set; get; }
            public virtual decimal valorPagar           { set; get; } //total vendas
            public virtual decimal valorAcrescimo       { set; get; } //total acrescimo
            public virtual decimal valorFinal           { set; get; } //total pagar
            public virtual DateTime dtPagamento         { set; get; }
            public virtual int tipoConta                { set; get; }  //1 receber, 2 pagar
            public virtual PlanoDeConta planoConta      { set; get; }
            public virtual int status                   { set; get; } //0 ativa, 1 fechada, 2 cancelada, 3 aguardando pagamento
            public virtual Venda venda                  { set; get; }
    
    
            public Conta() {
            }
    
            public Conta(Cliente cliente, String historico, DateTime dtLancamento, DateTime dtVencimento, 
                        decimal valorPagar, decimal valorAcrescimo, decimal valorFinal, int status){
    
                            this.cliente = cliente;
                            this.historico = historico;
                            this.dtLancamento = dtLancamento;
                            this.dtVencimento = dtVencimento;
                            this.valorPagar = valorPagar;
                            this.valorAcrescimo = valorAcrescimo;
                            this.valorFinal = valorFinal;
                            this.status = status;
            }
    
        }
    

    Он работает 100% окончательно