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)); }
public async Task <IActionResult> Get([FromQuery] StudiesQuery query) { var result = await _repository.SearchAsync(query); return(Ok(result)); }