public Result DetailList(MemberResultListDto dto) { var result = _actionFactory.Action(dto.Action)?.Apply(dto.Ids) ?? new Result(); if (!result.Success) { return(result); } var query = _memberResultRepository.AsNoTracking.Where(w => w.EndTime != null); query = query.Include(i => i.Member); query = query.Include(i => i.Quiz); query = new MemberResultListFilter(query, dto).FilteredQuery(); if (dto.MemberId != 0) { query = query.Where(w => w.MemberId == dto.MemberId); } else { var memberResultLatestRecords = from p in _memberResultRepository.AsNoTracking group p by p.MemberId into grp select grp.OrderByDescending(g => g.EndTime).FirstOrDefault(); var memberResultId = memberResultLatestRecords.Select(s => s.Id).ToList(); if (memberResultId != null) { query = query.Where(w => memberResultId.Contains(w.Id)); } } if (dto.FromScore != null && dto.FromScore != 0) { query = query.Where(w => w.Score >= dto.FromScore); } if (dto.ToScore != null && dto.ToScore != 0) { query = query.Where(w => w.Score <= dto.ToScore); } if (dto.FromPercentage != null && dto.FromPercentage != 0) { query = query.Where(w => w.Percentage >= dto.FromPercentage); } if (dto.ToPercentage != null && dto.ToPercentage != 0) { query = query.Where(w => w.Percentage <= dto.ToPercentage); } if (dto.FromAttempedQues != null && dto.FromAttempedQues != 0) { query = query.Where(w => w.AttempedQues >= dto.FromAttempedQues); } if (dto.ToAttempedQues != null && dto.ToAttempedQues != 0) { query = query.Where(w => w.AttempedQues <= dto.ToAttempedQues); } if (dto.CreatedSource != 0) { query = query.Where(w => w.Member.CreatedSource == dto.CreatedSource); } query = new MemberResultListOrder(query, dto).OrderByQuery(); result.SetPaging(dto?.Page ?? 1, dto?.Size ?? 10, query.Count()); if (dto.SortColumn != "timeDuration") { result.Data = query.Select(s => new MemberResultListDto { MemberId = s.Member.Id, Name = s.Member.Name, Email = s.Member.Email, College = s.Member.College, CreatedSource = s.Member.CreatedSource, CreatedAt = s.CreatedAt, Score = s.Score, Percentage = s.Percentage, AttempedQues = s.AttempedQues, StartTime = s.StartTime, EndTime = s.EndTime, QuizQuestions = s.MemberQuizAnswer.Count, QuizTitle = s.Quiz.Title, QuizCategoryName = s.Quiz.QuizCategory.Name }) .ToPaged(result.Paging.Page, result.Paging.Size) .ToList() .Select(s => new { s.MemberId, s.Name, s.Email, s.College, s.CreatedAt, s.CreatedSource, CreatedSourceName = Enum.GetName(typeof(MemberCreatedSource), s.CreatedSource) .Humanize(LetterCasing.Title), s.Score, s.Percentage, s.AttempedQues, s.StartTime, StartTimeDisplay = s.StartTime.Value.ToString("MM/dd/yyyy hh:mm:ss"), EndTimeDisplay = s.EndTime.Value.ToString("MM/dd/yyyy hh:mm:ss"), s.EndTime, TimeDuration = ((DateTime)s.EndTime - (DateTime)s.StartTime).Hours + ":" + ((DateTime)s.EndTime - (DateTime)s.StartTime).Minutes + ":" + ((DateTime)s.EndTime - (DateTime)s.StartTime).Seconds, s.QuizQuestions, s.QuizTitle, s.QuizCategoryName }); } else { if (dto.SortType == "desc") { result.Data = query.Select(s => new MemberResultListDto { Name = s.Member.Name, Email = s.Member.Email, College = s.Member.College, CreatedSource = s.Member.CreatedSource, CreatedAt = s.CreatedAt, Score = s.Score, Percentage = s.Percentage, AttempedQues = s.AttempedQues, StartTime = s.StartTime, EndTime = s.EndTime, QuizQuestions = s.Quiz.QuizQuestions.Count, QuizTitle = s.Quiz.Title, QuizCategoryName = s.Quiz.QuizCategory.Name }) .ToPaged(result.Paging.Page, result.Paging.Size) .ToList() .Select(s => new { s.Name, s.Email, s.College, s.CreatedAt, s.CreatedSource, CreatedSourceName = Enum.GetName(typeof(MemberCreatedSource), s.CreatedSource) .Humanize(LetterCasing.Title), s.Score, s.Percentage, s.AttempedQues, s.StartTime, StartTimeDisplay = s.StartTime.Value.ToString("MM/dd/yyyy hh:mm:ss"), EndTimeDisplay = s.EndTime.Value.ToString("MM/dd/yyyy hh:mm:ss"), s.EndTime, TimeDuration = ((DateTime)s.EndTime - (DateTime)s.StartTime).Hours + ":" + ((DateTime)s.EndTime - (DateTime)s.StartTime).Minutes + ":" + ((DateTime)s.EndTime - (DateTime)s.StartTime).Seconds, s.QuizQuestions, s.QuizTitle, s.QuizCategoryName }) .OrderByDescending(o => o.TimeDuration); } else { result.Data = query.Select(s => new MemberResultListDto { Name = s.Member.Name, Email = s.Member.Email, College = s.Member.College, CreatedSource = s.Member.CreatedSource, CreatedAt = s.CreatedAt, Score = s.Score, Percentage = s.Percentage, AttempedQues = s.AttempedQues, StartTime = s.StartTime, EndTime = s.EndTime, QuizQuestions = s.Quiz.QuizQuestions.Count, QuizTitle = s.Quiz.Title, QuizCategoryName = s.Quiz.QuizCategory.Name }) .ToPaged(result.Paging.Page, result.Paging.Size) .ToList() .Select(s => new { s.Name, s.Email, s.College, s.CreatedAt, s.CreatedSource, CreatedSourceName = Enum.GetName(typeof(MemberCreatedSource), s.CreatedSource) .Humanize(LetterCasing.Title), s.Score, s.Percentage, s.AttempedQues, s.StartTime, StartTimeDisplay = s.StartTime.Value.ToString("MM/dd/yyyy hh:mm:ss"), EndTimeDisplay = s.EndTime.Value.ToString("MM/dd/yyyy hh:mm:ss"), s.EndTime, TimeDuration = ((DateTime)s.EndTime - (DateTime)s.StartTime).Hours + ":" + ((DateTime)s.EndTime - (DateTime)s.StartTime).Minutes + ":" + ((DateTime)s.EndTime - (DateTime)s.StartTime).Seconds, s.QuizQuestions, s.QuizTitle, s.QuizCategoryName }) .OrderBy(o => o.TimeDuration); } } return(result); }
public IHttpActionResult Get([FromUri] MemberResultListDto dto) { return(Result(_memberResultService.DetailList(dto))); }