public List <ViewAnswersModel> GetAllAnswersFromSurvey(int id) { List <Chapter> chapterList = new List <Chapter>(); var chapterfree = _sfr.GetChapter(id); var chaptermulti = _smr.GetAllMultichoiceQuestionFromSurvey(id); foreach (var item in chapterfree) { var chapter = _cr.Get(item.ChapterID); if (!chapterList.Contains(chapter)) { chapterList.Add(chapter); } } foreach (var item in chaptermulti) { var chapter = _cr.Get(item.ChapterID); if (!chapterList.Contains(chapter)) { chapterList.Add(chapter); } } List <ViewAnswersModel> viewAnswers = new List <ViewAnswersModel>(); foreach (var item in chapterList) { List <ViewAllAnswers> viewAllAnswers = new List <ViewAllAnswers>(); var chapterfreetext = _sfr.GetAllFreetextQuestionFromChapterID(item, id); var chaptermultichoice = _smr.GetAllMultiQuestionFromChapterID(item, id); foreach (var items in chapterfreetext) { var freeTextQuestion = _ftr.Get(items.FreetextQuestionID); var freeTextAnswer = _ftar.GetFreeTextAnswerFromQuestion(items.FreetextQuestionID); ViewAllAnswers answer = new ViewAllAnswers { ID = freeTextQuestion.ID, Question = freeTextQuestion.Question, Order = items.Order, FreeTextAnswer = freeTextAnswer }; viewAllAnswers.Add(answer); } foreach (var items in chaptermultichoice) { var multichoice = _mr.Get(items.MultichoiceQuestionID); var optionsAnswer = GetOptions(multichoice.ID); Dictionary <string, int> optionsAnswersWithCount = new Dictionary <string, int>(); foreach (var option in optionsAnswer.GroupBy(o => o.Option) .Select(group => new { Option = group.Key, Count = group.Count() }) .OrderBy(x => x.Option)) { optionsAnswersWithCount.Add(option.Option, option.Count); } var optionsDictionaryToList = optionsAnswersWithCount.ToList(); ViewAllAnswers answer = new ViewAllAnswers { ID = multichoice.ID, Question = multichoice.Question, Order = items.Order, OptionsAnswersWithCount = optionsDictionaryToList }; viewAllAnswers.Add(answer); } var answers = viewAllAnswers.OrderBy(x => x.Order).ToList(); ViewAnswersModel allAnswers = new ViewAnswersModel { ChapterID = item.ID, Title = item.Title, AllAnswers = answers }; viewAnswers.Add(allAnswers); } return(viewAnswers); }