protected static IQueryable<Article> ArticleSort(IProviderArticleFilter filter, IQueryable<Article> query) { // Sort grid data. Sord is sort order, Sidx is the index to sort on if (filter.Sord == "desc") { if (filter.Sidx == "CountFlags") { // TODO: Rework the CountFlag logics to be more useful, right now it's just a lowerbound query = query.OrderByDescending(anArticle => anArticle.ArticleVotes .Where(vote => vote.IsFlag) .Count()); } else { // Sort by date if we don't know what this was query = query.OrderByDescending(anArticle => anArticle.EditDate); } } else if (filter.Sord == "asc") { if (filter.Sidx == "CountFlags") { query = query.OrderBy(anArticle => anArticle.ArticleVotes .Where(vote => vote.IsFlag) .Count()); } else { // Sort by date if we don't know what this was query = query.OrderBy(anArticle => anArticle.EditDate); } } return query; }
public static List<ProviderArticle> LoadBy(IProviderArticleFilter filter) { int m = (filter.Page - 1); if (m < 0) m = 0; int skip = filter.Rows * m; IQueryable<Article> query = DbCtx.Instance.Articles; query = ArticleFilter(filter, query); query = ArticleSort(filter, query); return query.Skip(skip) .Take(filter.Rows) .ToList() .ConvertAll(_converterEntityToProvider); }
protected static IQueryable<Article> ArticleFilter(IProviderArticleFilter filter, IQueryable<Article> query) { return query.Where(anArticle => (filter.Id == null || anArticle.Id == filter.Id) && (filter.Title == null || anArticle.Title.Contains(filter.Title)) && (filter.IsHidden == null || anArticle.IsHidden == filter.IsHidden) && (filter.IsPublished == null || anArticle.IsPublished == filter.IsPublished) && (filter.IgnoreFlags == null || anArticle.IgnoreFlags == filter.IgnoreFlags) && (filter.MemberId == null || anArticle.MemberId == filter.MemberId) && (filter.CountFlags == null || anArticle.ArticleVotes.Where(vote => vote.IsFlag).Count() >= filter.CountFlags) ); }
public static int Count(IProviderArticleFilter filter) { IQueryable<Article> query = DbCtx.Instance.Articles; query = ArticleFilter(filter, query); return query.Count(); }