2016-10-05 3 views
0

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

попробовав.

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; 
     } 

Entity

[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() { 

     } 
    } 
+0

селектов возвращает список чисел (так как вы выбираете SUM). Но вы говорите, что это список Conta. Измените свой код на 'IList list = _session ...' – Rob

+0

список чисел, что это значит? Я хочу 'IList '. – FernandoPaiva

+0

Если вы хотите «Список », почему вы выбираете 'SUM (c.valorFinal)' вместо 'c. *'? – Rob

ответ

0

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

Здесь решение.

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; 
     } 

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

[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%, наконец

Смежные вопросы