using System.Collections.Generic;
using System.Globalization;
Registro[] listaRegistros = new Registro[14];
listaRegistros[0] = new Registro
{ Data = new DateTime(2019, 10, 1), Hora = "08:01", Funcionario = "João" };
listaRegistros[1] = new Registro
{ Data = new DateTime(2019, 10, 1), Hora = "07:56", Funcionario = "Maria" };
listaRegistros[2] = new Registro
{ Data = new DateTime(2019, 10, 1), Hora = "12:02", Funcionario = "João" };
listaRegistros[3] = new Registro
{ Data = new DateTime(2019, 10, 1), Hora = "12:01", Funcionario = "Maria" };
listaRegistros[4] = new Registro
{ Data = new DateTime(2019, 10, 1), Hora = "13:01", Funcionario = "João" };
listaRegistros[5] = new Registro
{ Data = new DateTime(2019, 10, 1), Hora = "12:59", Funcionario = "Maria" };
listaRegistros[6] = new Registro
{ Data = new DateTime(2019, 10, 1), Hora = "18:02", Funcionario = "João" };
listaRegistros[7] = new Registro
{ Data = new DateTime(2019, 10, 1), Hora = "17:58", Funcionario = "Maria" };
listaRegistros[8] = new Registro
{ Data = new DateTime(2019, 10, 2), Hora = "08:09", Funcionario = "João" };
listaRegistros[9] = new Registro
{ Data = new DateTime(2019, 10, 2), Hora = "12:01", Funcionario = "João" };
listaRegistros[10] = new Registro
{ Data = new DateTime(2019, 10, 2), Hora = "12:54", Funcionario = "João" };
listaRegistros[11] = new Registro
{ Data = new DateTime(2019, 10, 2), Hora = "12:58", Funcionario = "Maria" };
listaRegistros[12] = new Registro
{ Data = new DateTime(2019, 10, 2), Hora = "18:02", Funcionario = "João" };
listaRegistros[13] = new Registro
{ Data = new DateTime(2019, 10, 2), Hora = "18:30", Funcionario = "Maria" };
List<Totalizador> totais = new();
var porFuncionario = listaRegistros.AsQueryable().GroupBy(log => log.Funcionario);
foreach(var fun in porFuncionario)
var porData = fun.GroupBy(log => log.Data);
foreach(var data in porData)
var porHorario = data.OrderBy(horario => horario.Hora).ToList();
while(porHorario.Count > 1)
var Entrada = porHorario.Take(1).First();
var Saida = porHorario.Skip(1).Take(1).First();
var totalDoDia = totais.Where(total => total.Data == data.Key &&
total.Funcionario == fun.Key).FirstOrDefault();
var horaEntrada = DateTime.ParseExact(Entrada.Hora, "HH:mm", CultureInfo.InvariantCulture);
var horaSaida = DateTime.ParseExact(Saida.Hora, "HH:mm", CultureInfo.InvariantCulture);
var totalTurno = horaSaida.Subtract(horaEntrada);
totalDoDia.Total = totalDoDia.Total.Add(totalTurno);
porHorario = porHorario.Skip(2).ToList();
foreach(var total in totais)
Console.WriteLine("funcionario: {0}, data: {1}, total: {2}",
total.Data.ToString("yyyy-MM-dd"),
total.Total.ToString("hh':'mm"));
public string Hora = string.Empty;
public string Funcionario = string.Empty;
public string Funcionario = string.Empty;