Jump to content
luiz-om

Busca por ultima inserção no banco para subtração

Recommended Posts

 

Estou começando a aprender c#, e estou com a seguinte duvida. Tenho as tabelas lote, leitura e consumo. A tabela leitura herda de lote o ID. um lote tem muitas leituras. E uma leitura tem um consumo.

A real duvida e a seguinte: quando faço a inserção de uma leitura o consumo já é salvo automático, porém quero buscar a última leitura inserida com aquele ID fazer a subtração do número dela pra poder gerar o valor certo na tabela consumo. e não estou conseguindo fazer isso.

       [Table("Lote")]
    public class Lote
    {
        [Key]
        public int Id { get; set; }

        [Required]
        [MinLength(2, ErrorMessage ="O nome deve ter no minimo 2 caracters")]
        [MaxLength(140, ErrorMessage ="O nome pode ter no maximo 140 caracteres")]
        public string Proprietario { get; set; }

        public string CPF { get; set; }


        //Gera um checkbox
        public Boolean Socio { get; set; }
        public string Cavalete { get; set; } 

      public virtual  ICollection<Leitura> Leituras { get; set; }
    }

 [Table("Leitura")]
    public class Leitura
    {
        [Key]
        public int Id { get; set; }

        [ForeignKey("Lote")]
        public int LoteId { get; set; }

        public DateTime DataLeitura { get; set; }


        public int NumeroLeitura { get; set; }

        public virtual Lote Lote { get; set; }

        public virtual Consumo Consumo { get; set; }



    }

 public class Consumo
    {
        [Key, ForeignKey("Leitura")]
        public int Id { get; set; }

        public Double Valor { get; set; }

        public DateTime?  DataPagamento { get; set; }



        public virtual Leitura Leitura { get; set; }
    }

A parte de create da controller é essa

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "Id,LoteId,DataLeitura,NumeroLeitura")] Leitura leitura)
        {
            if (ModelState.IsValid)
            {
                //aki tudo que ja tentei
                /*
                 *  var leitura2 = from l in db.Leitura select l;
                 leitura2 = leitura2.OrderByDescending(l => l.Id);
                 db.Leitura.Where(l => l.LoteId == leitura.LoteId).OrderByDescending(l=> l.NumeroLeitura);
                 // db.Leitura.leitura2.NumeroLeitura = db.Leitura.Where(l => l.LoteId == leitura.LoteId).FirstAsync;
                //  db2.Leitura.Find(leitura2.LoteId).;
                var sql =  db.Leitura.SqlQuery("select ID from Leitura Order by ID DESC;");
                 */


                var consumo = new Consumo();
                consumo.Leitura = leitura;


                //Essa parte que faz a conta apra salvar o consumo
                consumo.Valor =( leitura.NumeroLeitura) * 0.71;



//quero fazer +- isso
//consumo.Valor = (leitura.NumeroLeitura< <- ESSE SERIA O VALOR DA LEITURA ANTERIOR> - leitura.NumeroLeitura) * 0.71;



                db.Leitura.Add(leitura);
                db.Consumo.Add(consumo);
                db.SaveChanges();

                return RedirectToAction("Index");
            }

            ViewBag.LoteId = new SelectList(db.Lote, "Id", "CPF", leitura.LoteId);
            return View(leitura);
        }

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Rui PG
      Olá Amigos!
      Por favor, vocês poderiam me ajudar em uma questão, sou muito novo em desenvolvimento e acabei pegando o barco andando aqui na empresa :) rs.
       
      NECESSIDADE
       
      - Carregar os dados que vem da procedure "Proc_Lista" nas colunas que foram criadas manualmente no Datagrid.
      - Ao clicar no checkbox, da coluna “Selecionar”, de qualquer linha do Datagrid, os dados da linha devem ser apresentados nos campos do Form (TextBox e Combobox).
      - Ao desmar o checkbox da linha selecionada no Datagrid, os dados devem ser limpos do Form.
       
      O que eu tentei fazer
       
       
      Quando executo o programa o sistema está criando os campos automaticamente dentro do datagrid e deveria carregar dentro de cada coluna que foi criada.

      Resultado que está dando errado, quando carrego os dados no datagrid.
      O código está substituindo os meus campos que terminam com o (X), nesse caso preciso que as informações carreguem dentro dos campos terminados em (X) na qual eu criei manualmente, porém respeitando as camadas do projeto na qual descrevi abaixo.
      (Print do form em execução)

       
      CAMADA DE DADOS
      - Lista os Dados para o DataGrid
              public DataTable MostrarVisita(int CODALUNO)
              {
                  comando.Connection = conexao.Conectar();
                  comando.CommandText = "Proc_Lista_FollowupDetalheVisita";
                  comando.CommandType = CommandType.StoredProcedure;
                  comando.Parameters.AddWithValue("@CODALUNO", CODALUNO);
                  leer = comando.ExecuteReader();
                  tabela.Load(leer);
                  conexao.Desconectar();
                  return tabela;
              }//fim do bloco
       
      CAMADA DE NEGOCIOS
      public DataTable MostrarFollowupGeral(string CODALUNO)
              {
                 DataTable tabela = new DataTable();
          tabela = objetoFollowupGeral.MostrarVisita(Convert.ToInt32(CODALUNO));
                 return tabela;
              }
       
      CAMADA DO USUARIO
              private void MostrarFollowupVisita()
              {
       
                  dtgVisita.Columns.Clear
                  var columnCheck = new DataGridViewCheckBoxColumn();
                  columnCheck.HeaderText = "[x]";
                  this.dtgVisita.Columns.Add(columnCheck);
       
                 
                  var varCodAlunoII = txtCodAluno.Text;
      FollowupGeralModel objectInterno = new FollowupGeralModel();               dtgVisita.DataSource = objectInterno.MostrarFollowupGeral(varCodAlunoII.ToString());
                  dtgVisita.Columns[1].Visible = false;
                  txtTotalLinhaDataGrid.Text = dtgVisita.RowCount.ToString();
              }
       
    • By Ana Miguel
      Estou tendo um problema ao tentar adicionar uma tabela nova no meu modelo de digrama da minha base de dados. O VS simplesmente não gera a tabela (no caso, o Entity Types, Complex Types e Function Imports). Porém, a procedure dessa minha tabela é adicionada sem nem um problema.
    • By magrelarr
      Olá pessoal. Me chamo Lucas e tenho uma enorme vontade em aprender programação, na intenção de criar um jogo bem simples, mas com alguns detalhes. Minha ideia é um jogo sobre eleições politicas, numa terra ficticia que criei, e contaria com partidos disputando em sete regiões, números em graficos sobre os votos, eleitos e não eleitos, divisão dos poderes, formação de governo, etc. Algo programado dessa forma. Parece complexo mas seria algo básico.
      Então são duas perguntas:
      1° Por onde começar? Eu tenho muita vontade, mas conheço pouco da área. O primeiro passo que foi a história, os mapas, partidos e logos eu já criei, mas e depois?
      2° qual a melhor linguagem pra se aprender. Será um jogo de texto, sem personagens, apenas números e nomes, e realmente não faço ideia de que tipo de linguagem se usa pra jogos assim.

      Deixem dicas ou se caso se interessem pelo projeto, mantenho contato. Obrigado.
    • By ArxT
      Construa um algoritmo para analisar estoque de uma empresa. Inicialmente o programa deve solicitar do usuário a quantidade de itens diferentes em estoque. Em seguida ler, para cada item, o seu nome e a quantidade de unidades no estoque. Ao final, informar o nome do item com mais unidades armazenadas.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.