none
Somar Colunas Lambda expression RRS feed

  • Pergunta

  • Olá Pessoal , estou tentando somar 3 colunas de uma mesma tabela em uma expressão lambda mas não estou conseguindo.

    Alguém tem algum exemplo ?

    Tks.


    • Editado _Manigold_ segunda-feira, 10 de março de 2014 16:47
    segunda-feira, 10 de março de 2014 16:46

Respostas

  • Vc deve agrupar os dados e depois somar por exemplo :

     var r = db.TB1.GroupBy(g => new
                                       {
                                           g.ID,
                                           g.IDADE,
                                           g.NUMERO
                                       })
                                     .Select(s => new
                                        {
                                            SOMA = s.Sum(i => i.ID) + s.Sum(i => i.IDADE) + s.Sum(i => i.NUMERO)
                                        }).ToList();

    • Marcado como Resposta _Manigold_ terça-feira, 8 de abril de 2014 13:19
    segunda-feira, 10 de março de 2014 17:15
  • Entendi mais simples então faça direto na sua variavel query :

     var query = db.TB1.GroupBy(
                                        g => new
                                        {
                                            g.ID,
                                            g.IDADE,
                                        })
                                    .Select(s => new
                                        {
                                            SOMA = s.Sum(i => i.ID) + s.Sum(i => i.IDADE),
                                        }).ToList();
    
                    int totalSoma = query.Sum(s => s.SOMA.Value);
                    int? somaUmaLinha = query.Find(i => i.SOMA > 0).SOMA.Value;
    Veja que totalSoma tem toda a soma e somaumalinha apenas a 1 linha.Boa Sorte.

    • Marcado como Resposta _Manigold_ terça-feira, 8 de abril de 2014 13:19
    segunda-feira, 10 de março de 2014 18:17

Todas as Respostas

  • Olá,

    Se eu entendi direito você quer algo assim:

    var query = p from table
                select new {ID = p.ID, TOTAL = CAMPOA + CAMPOB + CAMPOC}

    Se não for isso teria como você colocar a query SQL que você quer transformar em linq?

    segunda-feira, 10 de março de 2014 17:05
  • Sim , mas em lambda.

    Muito obrigado.

    segunda-feira, 10 de março de 2014 17:06
  • Oi

    Isso 

    var query = p from table
                select new {ID = p.ID, TOTAL = CAMPOA + CAMPOB + CAMPOC}

    Isso

    var query = lst.Select(p => new {ID = p.ID, TOTAL = CAMPOA + CAMPOB + CAMPOC})
    Só são maneiras diferentes de expressar o mesmo comando. Vai de gosto e de legibilidade do código.


    segunda-feira, 10 de março de 2014 17:12
  • Vc deve agrupar os dados e depois somar por exemplo :

     var r = db.TB1.GroupBy(g => new
                                       {
                                           g.ID,
                                           g.IDADE,
                                           g.NUMERO
                                       })
                                     .Select(s => new
                                        {
                                            SOMA = s.Sum(i => i.ID) + s.Sum(i => i.IDADE) + s.Sum(i => i.NUMERO)
                                        }).ToList();

    • Marcado como Resposta _Manigold_ terça-feira, 8 de abril de 2014 13:19
    segunda-feira, 10 de março de 2014 17:15
  • Blz meu querido, vou tentar aqui, se der certo confirmo.

    Muito obrigado.

    segunda-feira, 10 de março de 2014 17:15
  • Olá Daniel, minha duvida agora é a seguinte eu preciso dar um loop para percorrer as informaçoes ?

          public CardapioModelo Detalhe(int codigo)
            {


                // Busco toda a informação do banco
                using (var bd = new BancoEntities())
                {

                    var dados = new CardapioModelo();


                    var query = bd.tbl_Cardapio.GroupBy(g => new
                       {
                           g.Semana,
                           g.Cafe_Manha,
                           g.Ds_Cafe_Manha
                       })
                                        .Select(s => new
                                        {
                                            SOMA = s.Sum(i => i.Calorias_Manha) + s.Sum(i => i.Calorias_Jantar) + s.Sum(i => i.Calorias_Almoco)
                                        }).ToList();



                    foreach (var item in query)
                    {

                        dados.total = item.SOMA;

                    }


                    return dados;
                }

            }

    Essa é a maneira correta ?

    Muito obrigado.

    • Editado _Manigold_ segunda-feira, 10 de março de 2014 17:31
    segunda-feira, 10 de março de 2014 17:27
  • Não vc pode retornar diretamente no seu método usando o dynamic ou criando uma classe e retornando-a como um List<Classe> , o que vc deseja fazer com esses dados, vc deseja retornar os dados da tabela inteira mesmo ? e usar em um grid algo do tipo?

    segunda-feira, 10 de março de 2014 17:36
  • Na verdade so preciso do total e jogar em uma variavel.

    Simples ou em uma propriedade.

    Tks.

    segunda-feira, 10 de março de 2014 17:40
  • Entendi mais simples então faça direto na sua variavel query :

     var query = db.TB1.GroupBy(
                                        g => new
                                        {
                                            g.ID,
                                            g.IDADE,
                                        })
                                    .Select(s => new
                                        {
                                            SOMA = s.Sum(i => i.ID) + s.Sum(i => i.IDADE),
                                        }).ToList();
    
                    int totalSoma = query.Sum(s => s.SOMA.Value);
                    int? somaUmaLinha = query.Find(i => i.SOMA > 0).SOMA.Value;
    Veja que totalSoma tem toda a soma e somaumalinha apenas a 1 linha.Boa Sorte.

    • Marcado como Resposta _Manigold_ terça-feira, 8 de abril de 2014 13:19
    segunda-feira, 10 de março de 2014 18:17