예제 #1
0
        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            if (bindingContext == null)
            {
                throw new ArgumentNullException(nameof(bindingContext));
            }

            var formReq = bindingContext.HttpContext.Request.Query;

            var page = new StringValues();

            formReq.TryGetValue("page", out page);
            var limit = new StringValues();

            formReq.TryGetValue("limit", out limit);
            var groupBy = new StringValues();

            formReq.TryGetValue("groupBy", out groupBy);
            var groupByDirection = new StringValues();

            formReq.TryGetValue("groupByDirection", out groupByDirection);

            var result = new GetPlayersGroupingDto()
            {
                page             = Convert.ToInt16(page),
                limit            = Convert.ToInt16(limit),
                groupBy          = groupBy.ToString(),
                groupByDirection = groupByDirection.ToString()
            };

            bindingContext.Result = ModelBindingResult.Success(result);
            return(Task.CompletedTask);
        }
        public JsonResult GetPlayersGrouping([ModelBinder(typeof(GetPlayersGroupingDtoBinder))] GetPlayersGroupingDto vm)
        {
            List <Asp.NetCore.Models.DTO.Player> records;
            int total;

            var query = _context.Players.Select(p => new Asp.NetCore.Models.DTO.Player
            {
                ID           = p.ID,
                Name         = p.Name,
                PlaceOfBirth = p.PlaceOfBirth,
                DateOfBirth  = p.DateOfBirth,
                CountryID    = p.CountryID,
                CountryName  = p.Country.Name,
                OrderNumber  = p.OrderNumber
            });

            if (vm.groupBy == "countryName")
            {
                if (vm.groupByDirection.Trim().ToLower() == "asc")
                {
                    query = query.OrderBy(q => q.CountryName).ThenBy(q => q.OrderNumber);
                }
                else
                {
                    query = query.OrderByDescending(q => q.CountryName).ThenBy(q => q.OrderNumber);
                }
            }
            else
            {
                query = query.OrderBy(q => q.OrderNumber);
            }

            total = query.Count();
            if (vm.page.HasValue && vm.limit.HasValue)
            {
                int start = (vm.page.Value - 1) * vm.limit.Value;
                records = query.Skip(start).Take(vm.limit.Value).ToList();
            }
            else
            {
                records = query.ToList();
            }

            return(new JsonResult(new { records, total }));
        }