Example #1
0
        public async Task <PagedResult <Study> > SearchAsync(StudiesQuery query)
        {
            Regex searchRegex;

            if (string.IsNullOrWhiteSpace(query.Search))
            {
                searchRegex = new Regex(".");
            }
            else
            {
                var keywords    = query.Search.Split(' ');
                var regexFilter = string.Join("(.*?)", keywords);
                searchRegex = new Regex(regexFilter, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
            }

            var filter = Builders <Study> .Filter.Regex(study => study.Name,
                                                        new BsonRegularExpression(searchRegex));

            var projection = Builders <Study> .Projection.Exclude(x => x.Results);

            Expression <Func <Study, object> > orderPredicate = x => x.Created;

            return(await Collection.Find(filter).Project <Study>(projection).SortByDescending(orderPredicate)
                   .PaginateAsync(query));
        }
Example #2
0
        public async Task <IActionResult> Get([FromQuery] StudiesQuery query)
        {
            var result = await _repository.SearchAsync(query);

            return(Ok(result));
        }