示例#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 sortBy = new StringValues();

            formReq.TryGetValue("sortBy", out sortBy);
            var direction = new StringValues();

            formReq.TryGetValue("direction", out direction);
            var name = new StringValues();

            formReq.TryGetValue("name", out name);
            var nationality = new StringValues();

            formReq.TryGetValue("nationality", out nationality);
            var placeOfBirth = new StringValues();

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

            var result = new GetPlayersDto()
            {
                page         = Convert.ToInt16(page),
                limit        = Convert.ToInt16(limit),
                sortBy       = sortBy.ToString(),
                direction    = direction.ToString(),
                name         = name.ToString(),
                nationality  = nationality.ToString(),
                placeOfBirth = placeOfBirth.ToString()
            };

            bindingContext.Result = ModelBindingResult.Success(result);
            return(Task.CompletedTask);
        }
        public JsonResult GetPlayers([ModelBinder(typeof(GetPlayersDtoBinder))] GetPlayersDto 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 != null ? p.Country.Name : "",
                IsActive     = p.IsActive,
                OrderNumber  = p.OrderNumber
            });

            if (!string.IsNullOrWhiteSpace(vm.name))
            {
                query = query.Where(q => q.Name.Contains(vm.name));
            }

            if (!string.IsNullOrWhiteSpace(vm.nationality))
            {
                query = query.Where(q => q.CountryName != null && q.CountryName.Contains(vm.nationality));
            }

            if (!string.IsNullOrWhiteSpace(vm.placeOfBirth))
            {
                query = query.Where(q => q.PlaceOfBirth != null && q.PlaceOfBirth.Contains(vm.placeOfBirth));
            }

            if (!string.IsNullOrEmpty(vm.sortBy) && !string.IsNullOrEmpty(vm.direction))
            {
                if (vm.direction.Trim().ToLower() == "asc")
                {
                    switch (vm.sortBy.Trim().ToLower())
                    {
                    case "name":
                        query = query.OrderBy(q => q.Name);
                        break;

                    case "countryname":
                        query = query.OrderBy(q => q.CountryName);
                        break;

                    case "placeOfBirth":
                        query = query.OrderBy(q => q.PlaceOfBirth);
                        break;

                    case "dateofbirth":
                        query = query.OrderBy(q => q.DateOfBirth);
                        break;
                    }
                }
                else
                {
                    switch (vm.sortBy.Trim().ToLower())
                    {
                    case "name":
                        query = query.OrderByDescending(q => q.Name);
                        break;

                    case "countryname":
                        query = query.OrderByDescending(q => q.CountryName);
                        break;

                    case "placeOfBirth":
                        query = query.OrderByDescending(q => q.PlaceOfBirth);
                        break;

                    case "dateofbirth":
                        query = query.OrderByDescending(q => q.DateOfBirth);
                        break;
                    }
                }
            }
            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 }));
        }