private static Expression <Func <FoodDocument, bool> > FilterBy(FilterFoodsQuery request) { return(request.FilterBy switch { "category" => x => x.CategoryId == request.FilterValue, "deal" => x => x.DealId == request.FilterValue, "restaurant" => x => x.RestaurantId == request.FilterValue, _ => x => true });
public async Task <Result <IPagedList <FoodMinimalDto> > > Handle(FilterFoodsQuery request, CancellationToken cancellationToken) { var foods = await _collection.FoodCollection.Find(FilterBy(request)) .SortByDescending(FoodDocument.GetOrderBy(request.OrderBy)) .Skip(PaginationHelper.Skip(request.PageNumber, request.PageSize)) .Limit(request.PageSize) .Project(Projections.MinimalFoodProjection()) .ToListAsync(cancellationToken); return(Result.Ok(foods.ToPagedList(request.PageNumber, request.PageSize))); }