private IEnumerable <SupervisorEscolasDto> MapearSupervisorEscolaDre(IEnumerable <SupervisorEscolasDreDto> supervisoresEscolasDres) { var listaEscolas = servicoEOL.ObterEscolasPorCodigo(supervisoresEscolasDres.Select(a => a.EscolaId.ToString()).ToArray()); List <SupervisoresRetornoDto> listaSupervisores; if (supervisoresEscolasDres.Count() == 1 && string.IsNullOrEmpty(supervisoresEscolasDres.FirstOrDefault().SupervisorId)) { listaSupervisores = new List <SupervisoresRetornoDto>() { new SupervisoresRetornoDto() { CodigoRF = "", NomeServidor = "NÃO ATRIBUÍDO" } }; } else { listaSupervisores = servicoEOL.ObterSupervisoresPorCodigo(supervisoresEscolasDres.Select(a => a.SupervisorId.ToString()).ToArray()) .ToList(); } var supervisoresIds = supervisoresEscolasDres .GroupBy(a => a.SupervisorId) .Select(g => g.Key); foreach (var supervisorId in supervisoresIds) { var idsEscolas = supervisoresEscolasDres.Where(a => a.SupervisorId == supervisorId).Select(a => a.EscolaId).ToList(); IEnumerable <UnidadeEscolarDto> escolas = new List <UnidadeEscolarDto>(); if (idsEscolas.Count > 0) { escolas = from t in listaEscolas where idsEscolas.Contains(t.CodigoEscola) select new UnidadeEscolarDto() { Codigo = t.CodigoEscola, Nome = t.NomeEscola }; } var auditoria = supervisoresEscolasDres.FirstOrDefault(c => c.SupervisorId == supervisorId); yield return(new SupervisorEscolasDto() { SupervisorNome = listaSupervisores.FirstOrDefault(a => a.CodigoRF == (supervisorId ?? string.Empty)).NomeServidor, SupervisorId = supervisorId, Escolas = escolas.ToList(), AlteradoEm = auditoria.AlteradoEm, AlteradoPor = auditoria.AlteradoPor, AlteradoRF = auditoria.AlteradoRF, CriadoEm = auditoria.CriadoEm, CriadoPor = auditoria.CriadoPor, CriadoRF = auditoria.CriadoRF }); } }