public async Task <ServerResponse <List <FeedResponse> > > GetFeedsAsync(long appUserId, FeedFilterRequest feedFilterRequest, Expression <Func <Feed, bool> > accessPredicate) { return(await BaseInvokeAsync(async() => { var query = DbContext.Feeds .AsQueryable() .Where(x => x.AppUserId == appUserId.ToString()) .Where(accessPredicate) .AsEnumerable(); query = FilterFeeds(query, feedFilterRequest); query = query.OrderByDescending(x => x.CreateDate); if (feedFilterRequest.Offset.HasValue) { query = query.Skip(feedFilterRequest.Offset.Value); } if (feedFilterRequest.Limit.HasValue) { query = query.Take(feedFilterRequest.Limit.Value); } return ServerResponseBuilder.Build(await query.ToAsyncEnumerable() .Select(x => Mapper.Map <Feed, FeedResponse>(x)) .ToListAsync()); })); }
private IEnumerable <Feed> FilterFeeds(IEnumerable <Feed> query, FeedFilterRequest feedFilterRequest) { if (feedFilterRequest.TagIds.Any()) { query = query.Where(x => x.Tags.Any(tag => feedFilterRequest.TagIds.Any(t => t == tag.Id))); } return(query); }