2016-10-05 64 views
0

我试图SUM使用NHibernate的HQL,但是当执行查询抛出异常A first chance exception of type 'NHibernate.Exceptions.GenericADOException' occurred in NHibernate.dll和结果是不会返回。我怎么能这样做?如何在NHibernate HQL中使用SUM?

尝试。

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

     } 
    } 
+0

您选择退货号码列表(因为你选择SUM)。但是你说这是一个Conta的列表。将您的代码更改为'IList list = _session ...' – Rob

+0

数字列表,这是什么意思?我想要一个'IList '。 – FernandoPaiva

+0

如果你想要一个'List ',为什么你选择'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; 
     } 

然后我在课堂上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%最后