public static FilterDefinition <Product> CreateFilter(this ProductFilterCriteria searchCriteria)
        {
            var filters = new List <FilterDefinition <Product> >();

            var isActivefilter = Builders <Product> .Filter.Eq(p => p.IsActive, true);

            filters.Add(isActivefilter);

            if (!string.IsNullOrWhiteSpace(searchCriteria.SearchTerm))
            {
                var filter = Builders <Product> .Filter.Where(p => p.DisplayName.ToLowerInvariant()
                                                              .Contains(searchCriteria.SearchTerm.ToLowerInvariant()));

                filters.Add(filter);
            }

            if (!string.IsNullOrWhiteSpace(searchCriteria.Category))
            {
                var filter = Builders <Product> .Filter.Eq(p => p.Category.Code, searchCriteria.Category);

                filters.Add(filter);
            }

            if (!string.IsNullOrWhiteSpace(searchCriteria.Filters))
            {
                var searchFilters = searchCriteria.Filters.Split(',');
                var filter        = Builders <Product> .Filter.Where(p => p.Filters.Any(f => searchFilters.Contains(f.Code)));

                filters.Add(filter);
            }

            var filterCombined = Builders <Product> .Filter.And(filters);

            return(filterCombined);
        }
        public async Task <IEnumerable <Product> > ReadAsync(ProductFilterCriteria searchCriteria)
        {
            var filter = searchCriteria.CreateFilter();

            return(await _collection
                   .Find(filter)
                   .Limit(searchCriteria.Limit)
                   .Skip(searchCriteria.Skip)
                   .ToListAsync()
                   .ConfigureAwait(false));
        }
示例#3
0
        public async Task <IActionResult> Get(ProductFilterCriteria productFilter)
        {
            var countLimited = productFilter.Limit > 1000 || productFilter.Limit == 0 ? 1000 : productFilter.Limit;

            productFilter.Limit = countLimited;

            var products = await _productReader.ReadAsync(productFilter).ConfigureAwait(false);

            if (!products.Any())
            {
                return(NoContent());
            }
            return(Ok(products));
        }