public async Task <List <Post> > GetPostsAsync(PostFilters.GetAllPost filter = null, PaginationFilter paginationFilter = null) { var queryable = _dataContext.Posts.AsQueryable(); if (paginationFilter == null) { return(await queryable.Include(x => x.Tags).ToListAsync()); } queryable = AddFiltersOnQuery(filter, queryable); var skip = (paginationFilter.PageNumber - 1) * paginationFilter.PageSize; return(await queryable.Include(x => x.Tags) .Skip(skip).Take(paginationFilter.PageSize).ToListAsync()); }
private static IQueryable <Post> AddFiltersOnQuery(PostFilters.GetAllPost filter, IQueryable <Post> queryable) { if (!string.IsNullOrEmpty(filter?.UserId)) { queryable = queryable.Where(x => x.UserId == filter.UserId); } if (!string.IsNullOrEmpty(filter?.PostName)) { queryable = queryable.Where(x => x.Name == filter.PostName); } if (!string.IsNullOrEmpty(filter?.Tags)) { queryable = queryable.Where(x => x.Tags.Any(xx => xx.TagName == filter.Tags)); } return(queryable); }