none
agrupar con linq RRS feed

  • Pregunta

  • tengo una lista de esta clase

    public class EntidadReporteAsistenciaDetalle : EntidadBase
        {
            public DateTime Fecha { get; set; }
            public int IdLinea { get; set; }
            public string Linea { get; set; }
            public int IdTurno { get; set; }
            public string Turno { get; set; }
            public int SapId { get; set; }
            public string NombreCompleto { get; set; }
            public int IdPuesto { get; set; }
            public string Puesto { get; set; }
            public int IdNivel { get; set; }
            public string Nivel { get; set; }
            public string JTSCve { get; set; }
            public string CentroCostos { get; set; }
            public string IdTipoPuesto { get; set; }
            public string TipoPuesto { get; set; }
            public string RelojEntra { get; set; }
            public string RelojSale { get; set; }
            public string HorarioEntra { get; set; }
            public string HorarioSale { get; set; }
            public int HorarioHoras { get; set; }
            public int HorarioMinutos { get; set; }
            public int IdIncidencia { get; set; }
            public string Incidencia { get; set; }
            public int MinutosIncidencia { get; set; }
        }

    esa lista tiene muchas registros donde todo es igual solo el IdIncidencia cambia

    y yo quiero tranformar esa lista en una lista de esta clase

    public class AsistenciaTrabajador
        {
            public DateTime Fecha { get; set; }
            public int IdLinea { get; set; }
            public string Linea { get; set; }
            public int IdTurno { get; set; }
            public string Turno { get; set; }
            public int SapId { get; set; }
            public string NombreCompleto { get; set; }
            public int IdPuesto { get; set; }
            public string Puesto { get; set; }
            public int IdNivel { get; set; }
            public string Nivel { get; set; }
            public string JTSCve { get; set; }
            public string CentroCostos { get; set; }
            public string IdTipoPuesto { get; set; }
            public string Clasificacion { get; set; }
            public RelojChecador RelojChecador { get; set; }
            public HorarioEmpleado HorarioEmpleado { get; set; }
            public TiempoEmpleado TiempoEmpleado { get; set; }
            public TimeSpan TiempoExtra { get; set; }
            public TimeSpan Recuperacion { get; set; }
            public TimeSpan TiempoTotal { get; set; }
        }


    donde la clase TiempoEmpleado contiene las incidencias en campos

    public class TiempoEmpleado
        {
            public TimeSpan? LLegadaTarde { get; set; }
            public TimeSpan? SalidaTemprano { get; set; }
            public TimeSpan? SalidaConRetorno { get; set; }
            public string Ausencia { get; set; }
            public TimeSpan? TiempoTrabajado { get; set; }
        }


    la idea es el cambiar la otra lista a este formato usando linq y hice esta consulta linq.

    List<AsistenciaTrabajador> query1 = (from A in reporte.Entidades
                                                    group A by new { A.SapId } into G
                                                    select new AsistenciaTrabajador()
                                                    {
                                                        TiempoEmpleado = new TiempoEmpleado()
                                                        {
                                                            LLegadaTarde = TimeSpan.FromMinutes(G.FirstOrDefault(x => x.IdIncidencia == 11).MinutosIncidencia),
                                                            SalidaTemprano = ValidarIncidenciasMinutos(G.FirstOrDefault(x => x.IdIncidencia == 1).MinutosIncidencia),
                                                            SalidaConRetorno = ValidarIncidenciasMinutos(G.FirstOrDefault(x => x.IdIncidencia == 14).MinutosIncidencia)
                                                        },
                                                    }).ToList();

    no puse como se llenan los otros campos por que so no falla, donde falla es cuando intente acomodar las incidencias en las

    propiedades de TiempoEmpleado.

    entra en el código busca la incidencia 11 el registro en el que esta no es 11 se regresa intenta crear Tiempo Empleado otra ves

    y truena marca se sale no recorre para encontrar una incidencia 11 y ponerla. 

    me podrían apoyar para saber que estoy haciendo mal

    miércoles, 19 de diciembre de 2018 2:49

Respuestas

  • hola

    >>entra en el código busca la incidencia 11 el registro en el que esta no es 11 se regresa intenta crear Tiempo Empleado otra ves y truena marca se sale no recorre para encontrar una incidencia 11 y ponerla

    deberias validar sino hay item con incidencia 11

    se podria ver si usando el "?" lo resuelve

    LLegadaTarde = TimeSpan.FromMinutes(G.FirstOrDefault(x => x.IdIncidencia == 11)?.MinutosIncidencia),

    ?. and ?[] null-conditional Operators (C# and Visual Basic)

    Sino hay que validarlo algo mas largo

    LLegadaTarde = G.FirstOrDefault(x => x.IdIncidencia == 11) == null ? TimeSpan.FromMinutes(0) : TimeSpan.FromMinutes(G.FirstOrDefault(x => x.IdIncidencia == 11).MinutosIncidencia),

    esta ultima es bastante larga, pero defines que pasa sino encuentra la incidencia

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta niqel miércoles, 19 de diciembre de 2018 16:55
    miércoles, 19 de diciembre de 2018 10:44