Пример #1
0
        public Result DetailList(MemberDetailListDto dto)
        {
            var result = _actionFactory.Action(dto.Action)?.Apply(dto.Ids) ?? new Result();

            if (!result.Success)
            {
                return(result);
            }

            var query = _memberRepository.AsNoTracking;

            query = new MemberDetailListFilter(query, dto).FilteredQuery();

            if (dto.CreatedSource != 0)
            {
                query = query.Where(w => w.CreatedSource == dto.CreatedSource);
            }

            query = new MemberListOrder(query, dto).OrderByQuery();

            result.SetPaging(dto?.Page ?? 1, dto?.Size ?? 10, query.Count());

            if (dto.SortColumn != "totalExam")
            {
                result.Data = query.Select(s => new MemberDetailListDto
                {
                    Id            = s.Id,
                    Name          = s.Name,
                    Email         = s.Email,
                    College       = s.College,
                    IsActive      = s.IsActive,
                    CreatedAt     = s.CreatedAt,
                    CreatedSource = s.CreatedSource
                })
                              .ToPaged(result.Paging.Page, result.Paging.Size)
                              .ToList()
                              .Select(s => new
                {
                    s.Id,
                    s.Name,
                    s.Email,
                    s.College,
                    s.CreatedAt,
                    s.CreatedSource,
                    CreatedSourceName = Enum.GetName(typeof(MemberCreatedSource), s.CreatedSource).Humanize(LetterCasing.Title),
                    TotalExam         = _memberResultRepository.AsNoTracking.Count(w => w.MemberId == s.Id)
                });
            }
            else
            {
                if (dto.SortType == "desc")
                {
                    result.Data = query.Select(s => new MemberDetailListDto
                    {
                        Id            = s.Id,
                        Name          = s.Name,
                        Email         = s.Email,
                        College       = s.College,
                        IsActive      = s.IsActive,
                        CreatedAt     = s.CreatedAt,
                        CreatedSource = s.CreatedSource
                    })
                                  .ToPaged(result.Paging.Page, result.Paging.Size)
                                  .ToList()
                                  .Select(s => new
                    {
                        s.Id,
                        s.Name,
                        s.Email,
                        s.College,
                        s.CreatedAt,
                        s.CreatedSource,
                        CreatedSourceName = Enum.GetName(typeof(MemberCreatedSource), s.CreatedSource).Humanize(LetterCasing.Title),
                        TotalExam         = _memberResultRepository.AsNoTracking.Count(w => w.MemberId == s.Id)
                    }).OrderByDescending(o => o.TotalExam);
                }
                else
                {
                    result.Data = query.Select(s => new MemberDetailListDto
                    {
                        Id            = s.Id,
                        Name          = s.Name,
                        Email         = s.Email,
                        College       = s.College,
                        IsActive      = s.IsActive,
                        CreatedAt     = s.CreatedAt,
                        CreatedSource = s.CreatedSource
                    })
                                  .ToPaged(result.Paging.Page, result.Paging.Size)
                                  .ToList()
                                  .Select(s => new
                    {
                        s.Id,
                        s.Name,
                        s.Email,
                        s.College,
                        s.CreatedAt,
                        s.CreatedSource,
                        CreatedSourceName = Enum.GetName(typeof(MemberCreatedSource), s.CreatedSource).Humanize(LetterCasing.Title),
                        TotalExam         = _memberResultRepository.AsNoTracking.Count(w => w.MemberId == s.Id)
                    }).OrderBy(o => o.TotalExam);
                }
            }
            return(result);
        }
Пример #2
0
 public IHttpActionResult Get([FromUri] MemberDetailListDto dto)
 {
     return(Result(_memberService.DetailList(dto)));
 }