Add data from a sql column c#

Asked

Viewed 335 times

0

My problem is this: I need to sum up the total hours of the employee who are in the bank, already in a separate column. Just to be clear, the hours the employee worked the day are already ready, I want to add up those total hours. Note: I believe it is something very easy, but as I am just starting to "program" I am not able to solve this.

using (PontoEntities entity = new PontoEntities())
        {
            Colaboradores cola1 = entity.Colaboradores.Where(cn => cn.Nome == strFunc).FirstOrDefault();
            var regs = entity.Batidas.Where(cn => cn.Codigo == cola1.ID);
            if (regs != null)
            {
                foreach (var item in regs)
                {
                    TimeSpan cont = TimeSpan.Parse(item.HorasTotais);;
                    Console.WriteLine("{0} horas trabalhadas", cont);
                }
                Console.Read();
            }

3 answers

1

The structure TimeSpan supports addition through method Add, you can do this by resorting to the entire loop. From what I understand in your code, cont is the hour worked in a column row, well, add it all in the same loop:

using (PontoEntities entity = new PontoEntities())
    {
        Colaboradores cola1 = entity.Colaboradores.Where(cn => cn.Nome == strFunc).FirstOrDefault();
        var regs = entity.Batidas.Where(cn => cn.Codigo == cola1.ID);
        if (regs != null)
        {
            // Cria um TimeSpan zerado
            TimeSpan totalTrabalhado = new TimeSpan();
            foreach (var item in regs)
            {
                TimeSpan cont = TimeSpan.Parse(item.HorasTotais);
                // Soma com o span atual no loop "item"
                totalTrabalhado.Add(cont);
                Console.WriteLine("{0} horas trabalhadas", cont);
            }
            Console.WriteLine("{0} é o total de horas trabalhadas", totalTrabalhado.ToString());
            Console.Read();
        }

1

    //Tente assim usando o sum do LINQ
    using (PontoEntities entity = new PontoEntities())
    {
        Colaboradores cola1 = entity.Colaboradores.Where(cn => cn.Nome == strFunc).FirstOrDefault();
        var regs = entity.Batidas.Where(cn => cn.Codigo == cola1.ID);
        if (regs != null)
        {
            TimeSpan soma = regs.Sum(x => x.HorasTotais)
            Console.Read();
        }

0

I refactored some of your code, but with commentary to improve your writing.

// PontoEntites é um Contexto de repositório ou banco de dados
// Então, quando instancia um PontoEntities ele retorna um Contexto, e não um Entity
// Uma entidade compôe um contexto
using (var ctx = new PontoEntities())
{
    // Nomenclatura de variaveis devem mostrar qual dado ela representa com clareza
    var colaborador = ctx.Colaboradores
                         // Em expressões, é "OK" encurtar as variaveis, para evitar
                         // colisão com variaveis externas, mas evite quando possivel
                         .FirstOrDefault(col => col.Nome == nomeColaborador);
                         // Colocar o tipo da variavel em seu nome é uma má prática

    // O uso do plural na nomenclatura é importante para deixar claro que 
    // representa uma coleção, e não apenas uma unidade do dado.
    // Mas tente nunca usar sufixo "Lista" como "ListaDeHoras" ou algo do tipo.       
    var horas = ctx
        // Entenda melhor a Linguagem Obliqua do seu negócio. 
        // Um colaborador "Bate o Ponto", então vc persiste os Pontos e não Batidas
        // Salvo se for um sistema de bar de coctails :)
        .Pontos
        // Codigo != Id. Codigo é uma informação fornecida, como Codigo de Barras,
        // Codigo de Area, Codigo de Acesso. A nomenclatura "Codigo" não deve ser usada
        // para Identificação, para isso, use "Id". 
        // Para "identificação" ou "chave primária", sempre use Id
        // Ex: Ponto.Id, e para relacionar use como sufixo, Ponto.ColaboradorId
        .Where(ponto => ponto.Id == colaborador.Id)
        // Sempre que possivel, reduza o trafego de dados entre seu repositorio de dados
        // e sua aplicação. Seu repositorio pode te entregar o total de horas, sem precisar
        // trafegar todo historico de Pontos. Isso aumenta performance e reduz complexidade
        // da sua aplicação
        .Sum(ponto => ponto.Horastotais);

    // Use Debug.WriteLine para criar logs em tempo de debugging
    // Esse é um output não bloqueante, e é certo que quando compilar 
    // seu código para release - produção - esse trecho não será incluído.
    // Vc pode ver suas saída pela janela Output / Debug
    Debug.WriteLine("{0} horas trabalhadas", horas);
 }

Browser other questions tagged

You are not signed in. Login or sign up in order to post.