public async Task <Page <NewsPost> > GetPage(GetNewsListBinding binding) { var newsQuery = _context.NewsPosts .AsNoTracking() .Where(o => o.IsArchived != true); if (!string.IsNullOrEmpty(binding.TitleFilter)) { newsQuery = newsQuery.Where(o => o.Title.Contains(binding.TitleFilter)); } #region Date filters if (binding.StartDate != null && binding.EndDate != null) { newsQuery = newsQuery.Where(o => o.CreateDate >= binding.StartDate && o.CreateDate <= binding.EndDate); } #endregion if (binding.Type.ToString() == NewsTypeBinding.All.ToString()) { newsQuery = newsQuery.OrderByDescending(o => o.CreateDate); var items = await newsQuery .Skip(binding.Offset) .Take(binding.Limit) .ToListAsync(); return(new Page <NewsPost> { Limit = binding.Limit, Offset = binding.Offset, Total = await newsQuery.CountAsync(), Items = items }); } else { var type = Enum.Parse <NationalProjectType>(binding.Type.ToString()); newsQuery = newsQuery .Where(o => o.Type == type) .OrderByDescending(o => o.CreateDate); var items = await newsQuery .Skip(binding.Offset) .Take(binding.Limit) .ToListAsync(); return(new Page <NewsPost> { Limit = binding.Limit, Offset = binding.Offset, Total = await newsQuery.CountAsync(), Items = items }); } }
public async Task <ActionResult <Page <NewsPost> > > GetNewsPosts( [FromQuery] GetNewsListBinding binding, CancellationToken cancellationToken) { return(await(new NewsQueryHandler(_context).GetPage(binding))); }