コード例 #1
0
        public async Task <IActionResult> List(FilterServiceDto filterServiceDto)
        {
            if (!ModelState.IsValid)
            {
                return(View());
            }
            var services = await _serviceService.FilterServicesAsync(filterServiceDto);

            ViewBag.Services = services;

            return(View());
        }
コード例 #2
0
        public async Task <IEnumerable <Service> > FilterAsync(FilterServiceDto filterServiceDto)
        {
            int  filters           = 0;
            bool availableFiltered = false;

            List <Service> result = new List <Service>();

            int minId = filterServiceDto.MinId ?? 0;
            int maxId = filterServiceDto.MaxId ?? 0;

            if (minId > 0 || maxId > 0)
            {
                var filteredMinIds = await _db.Services.Where(s => s.Id >= minId).ToListAsync();

                var filteredMaxIds = await _db.Services.Where(s => s.Id <= maxId).ToListAsync();

                if (minId > 0 && maxId == 0)
                {
                    result.AddRange(filteredMinIds);
                }
                else if (maxId > 0 && minId == 0)
                {
                    result.AddRange(filteredMaxIds);
                }

                result.AddRange(filteredMaxIds.Intersect(filteredMinIds));
                filters += 1;
            }

            if (!string.IsNullOrEmpty(filterServiceDto.Name))
            {
                var filteredNames = await _db.Services.Where(s => EF.Functions.Like(s.Name, $"%{filterServiceDto.Name}%")).ToListAsync();

                result.AddRange(filteredNames);
                filters += 1;
            }

            if (!string.IsNullOrEmpty(filterServiceDto.Description))
            {
                var filteredDescriptions = await _db.Services.Where(s => EF.Functions.Like(s.Description, $"%{filterServiceDto.Description}%")).ToListAsync();

                result.AddRange(filteredDescriptions);
                filters += 1;
            }

            if (filterServiceDto.IsAvailable)
            {
                var filteredAvailableServices = await _db.Services.Where(s => s.IsAvailable).ToListAsync();

                result.AddRange(filteredAvailableServices);
                if (!availableFiltered)
                {
                    availableFiltered = true;
                }
            }
            if (filterServiceDto.IsNotAvailable)
            {
                var filteredNotAvailableServices = await _db.Services.Where(s => !s.IsAvailable).ToListAsync();

                result.AddRange(filteredNotAvailableServices);
                if (!availableFiltered)
                {
                    availableFiltered = true;
                }
            }

            if (availableFiltered)
            {
                filters += 1;
            }
            var            groupedResults = result.GroupBy(r => r);
            List <Service> finalResult    = new List <Service>();

            foreach (var gr in groupedResults)
            {
                if (gr.Count() == filters)
                {
                    finalResult.Add(gr.Key);
                }
            }

            return(finalResult);
        }
コード例 #3
0
        public async Task <List <GetServiceDto> > FilterServicesAsync(FilterServiceDto filterServiceDto)
        {
            var filteredServices = await _repository.FilterAsync(filterServiceDto);

            return(filteredServices.Select(s => _converter.ServiceToGetServiceDto(s)).ToList());
        }