public List <Roteiro> ObterRoteirosPorAtividades(List <Atividade> atividades) { List <Roteiro> roteiros = new List <Roteiro>(); if (atividades == null || atividades.Count <= 0) { return(roteiros); } Roteiro roteiroPadrao = _listaBus.RoteiroPadrao.FirstOrDefault(x => x.Setor == atividades[0].SetorId); if (roteiroPadrao != null) { roteiroPadrao = ObterSimplificado(roteiroPadrao.Id); } List <String> titulos = new List <String>(); foreach (var atividade in atividades) { foreach (var finalidade in atividade.Finalidades) { finalidade.AtividadeId = atividade.Id; finalidade.AtividadeNome = atividade.NomeAtividade; finalidade.AtividadeSetorId = atividade.SetorId; String modeloTituloNaoAdicionadoRoteiro = _da.ModeloTituloNaoAdicionadoRoteiro(finalidade); if (!String.IsNullOrWhiteSpace(modeloTituloNaoAdicionadoRoteiro)) { titulos.Add("\"" + modeloTituloNaoAdicionadoRoteiro + "\""); continue; } Roteiro roteiroAux = _da.ObterRoteirosPorAtividades(finalidade); if (roteiroAux == null) { roteiroPadrao.AtividadeTexto = atividade.NomeAtividade; roteiros.Add(roteiroPadrao); continue; } roteiros.Add(roteiroAux); } } if (titulos.Count > 0) { Validacao.Add(Mensagem.Roteiro.TituloNaoAdicionadoRoteiroInterno(Mensagem.Concatenar(titulos))); } #region Faz a magica de agrupar os resultados roteiros = roteiros.GroupBy(x => x.Id).Select(y => new Roteiro { Id = y.First().Id, Nome = y.First().Nome, VersaoAtual = y.First().VersaoAtual, Tid = y.First().Tid, AtividadeTexto = y.Select(w => w.AtividadeTexto).Distinct().Aggregate((total, atual) => total + " / " + atual) }).ToList(); #endregion return(roteiros); }