public CartaoRespostaSimuladoAgendadoDTO GetCartaoRespostaSimuladoAgendado(int ClientID, int ExercicioID, int ExercicioHistoricoID) { CartaoRespostaSimuladoAgendadoDTO cartaoresposta = new CartaoRespostaSimuladoAgendadoDTO(); List <RespostasObjetivasCartaoRespostaSimuladoDTO> respostasObjetivas = new List <RespostasObjetivasCartaoRespostaSimuladoDTO>(); List <RespostasDiscursivasCartaoRespostaSimuladoDTO> respostasDiscursivas = new List <RespostasDiscursivasCartaoRespostaSimuladoDTO>(); using (MiniProfiler.Current.Step("Obtendo cartão resposta simulado agendado")) { var possuiOrdem = _repository.ObterOrdemSimulado(ExercicioID).Count > 0; var questoes = possuiOrdem ? _repository.ObterQuestoesSimuladoComOrdem(ExercicioID) : _repository.ObterQuestoesSimuladoSemOrdem(ExercicioID); var questoesIds = questoes.Select(x => x.Id).ToArray(); if (ExercicioHistoricoID > 0) { respostasObjetivas = _repository.GetRespostasObjetivasSimuladoAgendado(ExercicioHistoricoID, questoesIds); respostasDiscursivas = _repository.GetRespostasDiscursivasSimuladoAgendado(ExercicioHistoricoID, questoesIds); } foreach (Questao res in questoes) { var resObjetiva = (from r in respostasObjetivas where r.cartaoRespostaObjetiva.intQuestaoID == res.Id select new { r.questaoAlternativa.bitCorreta, r.cartaoRespostaObjetiva.intExercicioTipoId, r.cartaoRespostaObjetiva.txtLetraAlternativa }).ToList(); var resDiscursiva = (from r in respostasDiscursivas where r.cartaoRespostaDiscursiva.intQuestaoDiscursivaID == res.Id select new { r.questaoAlternativa.bitCorreta, r.cartaoRespostaDiscursiva.intExercicioTipoId, r.cartaoRespostaDiscursiva.txtResposta }).ToList(); if (resObjetiva.Count() > 0) { var resposta = resObjetiva.First(); res.Respondida = true; res.Correta = resposta.bitCorreta ?? false; res.RespostaAluno = resposta.txtLetraAlternativa; } if (resDiscursiva.Count() > 0) { var resposta = resDiscursiva.First(); if (!string.IsNullOrWhiteSpace(resposta.txtResposta)) { res.Respondida = true; } } res.ExercicioTipoID = (int)Exercicio.tipoExercicio.SIMULADO; } foreach (var cart in questoes) { cartaoresposta.Questoes.Add(new QuestaoSimuladoAgendadoDTO() { Id = cart.Id, Enunciado = cart.Enunciado, ExercicioTipoID = cart.ExercicioTipoID, MediaComentario = cart.MediaComentario, Respondida = cart.Respondida, RespostaAluno = cart.RespostaAluno, Tipo = cart.Tipo }); } cartaoresposta.HistoricoId = ExercicioHistoricoID; cartaoresposta.ClientID = ClientID; return(cartaoresposta); } }