private static DateTime GetMaxDate(ArticleSortType sortType) { return(sortType switch { ArticleSortType.Weekly => DateTime.Now.AddDays(-7), ArticleSortType.Monthly => DateTime.Now.AddMonths(-1), _ => DateTime.MinValue });
public List <ArticleViewModel> GetArticles(string tagName, ArticleSortType sortType, string search, int skip, int take) { DateTime filterDate = GetMaxDate(sortType); var query = _context.Articles .Where(article => article.CreateDate >= filterDate && article.Confirmed); if (tagName != null) { query = query.Where(article => article.ArticleTags.Any(articleTag => articleTag.Tag.Name.Equals(tagName))); } if (search != null) { query = query.Where(article => article.Title.Contains(search)); } var viewModelQuery = query.Select(article => new ArticleViewModel { Id = article.Id, AuthorName = article.Author.UserName, Title = article.Title, Text = article.Text, Tags = article.ArticleTags.Select(tag => tag.Tag.Name).ToList(), LikesCount = article.ArticleLikes.Count, CreateDate = article.CreateDate, Confirmed = article.Confirmed }).OrderByDescending(article => article.CreateDate); if (!sortType.Equals(ArticleSortType.Feed)) { viewModelQuery = viewModelQuery.OrderByDescending(a => a.LikesCount) .ThenByDescending(article => article.CreateDate); } return(viewModelQuery.Skip(skip).Take(take).ToList()); }