public ActionResult GetArticleContentList(ArticleQueryFilter filter, string typeIds) { if (filter == null) { throw new ArgumentNullException("filter"); } if (!string.IsNullOrWhiteSpace(typeIds)) { try { var typeList = typeIds.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(i => Convert.ToInt64(i)); filter.CategoryIds = typeList; } catch { } } if (!string.IsNullOrWhiteSpace(filter.Keywords)) { filter.Keywords = HttpUtility.UrlDecode(filter.Keywords); } var dataList = ArticleDAL.Instance.GetList(filter); return(GenerateContentList(dataList, "ArticleContentList", filter.TotalCount)); }
/// <summary> /// 获得首页表示的文章列表 /// 按照确认时间排序 /// </summary> /// <param name="p">分页器</param> /// <param name="isFirstPage">仅首页</param> /// <param name="AddtionalCondition">附加条件</param> /// <returns></returns> public static List <ArticleItemBody> GetPublicListForArticleByPage(Pages p, ArticleQueryFilter filter) { //注意这里必须要控制取出的数量,当然现在可以不考虑优化问题 //所有文章中首页审核通过的,限制数量4000篇(20 * 20) //取出后进行缓存 var sortArgs = new Sort.SortArg[1]; sortArgs[0] = new Sort.SortArg { FieldName = nameof(Article.ConfirmDateTime), SortType = Sort.SortType.Descending, SortOrder = 1 }; //修改后的文章再发布,则发布日期是最新的,这里使用首页审核日期作为排序日期。 Action <MongoCursor> setCursor = x => { x.SetSkip(p.SkipCount()).SetLimit(p.PageItemCount).SetSortOrder(Sort.GetSortBuilder(sortArgs)); }; var firstpage = new List <Article>(); firstpage = MongoDbRepository.GetRecList <Article>(GetQueryByArticelFilter(filter), setCursor); var titlelist = new List <ArticleItemBody>(); foreach (var item in firstpage) { titlelist.Add(GetArticleItemBodyById(item.Sn)); } return(titlelist); }
public ActionResult List(ArticleQueryFilter filter) { var dataList = ArticleDAL.Instance.GetList(filter); return(Json(new { Rows = dataList, Total = filter.TotalCount })); }
public IActionResult GetArticles([FromQuery] ArticleQueryFilter filters) { var articles = _articleService.GetArticles(filters); var articlesDTO = _mapper.Map <IEnumerable <ArticleDTO> >(articles); var response = new ApiResponse <IEnumerable <ArticleDTO> >(articlesDTO); var metadata = new { articles.TotalCount, articles.PageSize, articles.CurrentPage, articles.TotalPages, articles.HasNextPage, articles.HasPreviousPage }; Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(metadata)); return(Ok(response)); }
public PagedList <Article> GetArticles(ArticleQueryFilter filters) { var articles = _unitOfWork.ArticleRepository.GetAll(); if (filters.UserId != null) { articles = articles.Where(x => x.UserId == filters.UserId); } if (filters.CreatedAt != null) { articles = articles.Where(x => x.CreatedAt.ToShortDateString() == filters.CreatedAt?.ToShortDateString()); } if (filters.Description != null) { articles = articles.Where(x => x.Description.ToLower().Contains(filters.Description.ToLower())); } var pagedArticles = PagedList <Article> .Create(articles, filters.PageNumber, filters.PageSize); return(pagedArticles); }
/// <summary> /// 获得文章列表查询条件 /// </summary> /// <param name="filter"></param> /// <returns></returns> public static IMongoQuery GetQueryByArticelFilter(ArticleQueryFilter filter) { IMongoQuery basicQuery = null; if (filter.isFirstPage != null) { if (basicQuery != null) { basicQuery = Query.And(basicQuery, Query.EQ(nameof(Article.IsFirstPage), filter.isFirstPage)); } else { basicQuery = Query.EQ(nameof(Article.IsFirstPage), filter.isFirstPage); } } if (filter.isPrivate != null) { if (basicQuery != null) { basicQuery = Query.And(basicQuery, Query.EQ(nameof(Article.IsPrivate), filter.isPrivate)); } else { basicQuery = Query.EQ(nameof(Article.IsPrivate), filter.isPrivate); } } if (filter.statuslist != null) { IMongoQuery statusQuery = null; foreach (var status in filter.statuslist) { if (statusQuery != null) { statusQuery = Query.Or(statusQuery, Query.EQ(nameof(Article.PublishStatus), status)); } else { statusQuery = Query.EQ(nameof(Article.PublishStatus), status); } } if (basicQuery != null) { basicQuery = Query.And(basicQuery, statusQuery); } else { basicQuery = statusQuery; } } //Owner if (!string.IsNullOrEmpty(filter.ownid)) { if (basicQuery != null) { basicQuery = Query.And(basicQuery, Query.EQ(nameof(Article.OwnerId), filter.ownid)); } else { basicQuery = Query.EQ(nameof(Article.OwnerId), filter.ownid); } } if (!string.IsNullOrEmpty(filter.collectionid)) { if (basicQuery != null) { basicQuery = Query.And(basicQuery, Query.EQ(nameof(Article.CollectionID), filter.collectionid)); } else { basicQuery = Query.EQ(nameof(Article.CollectionID), filter.collectionid); } } IMongoQuery userQuery = null; //难度 if (filter.Levelist != null) { IMongoQuery levelQuery = null; foreach (var level in filter.Levelist) { if (levelQuery != null) { levelQuery = Query.Or(levelQuery, Query.EQ(nameof(Article.Level), level)); } else { levelQuery = Query.EQ(nameof(Article.Level), level); } } if (userQuery != null) { userQuery = Query.And(userQuery, levelQuery); } else { userQuery = levelQuery; } } //分类 if (filter.Cataloglist != null) { IMongoQuery CatalogQuery = null; foreach (var catalog in filter.Cataloglist) { if (CatalogQuery != null) { CatalogQuery = Query.Or(CatalogQuery, Query.EQ(nameof(Article.Catalog), catalog)); } else { CatalogQuery = Query.EQ(nameof(Article.Catalog), catalog); } } if (userQuery != null) { userQuery = Query.And(userQuery, CatalogQuery); } else { userQuery = CatalogQuery; } } //不包含,使用AND连接 if (filter.AntiTag != null) { IMongoQuery AntiTagQuery = null; foreach (var tag in filter.AntiTag) { if (AntiTagQuery != null) { //过滤标签用AND AntiTagQuery = Query.And(AntiTagQuery, Query.NE(nameof(Article.TagName), tag)); } else { AntiTagQuery = Query.NE(nameof(Article.TagName), tag); } } if (userQuery != null) { userQuery = Query.And(userQuery, AntiTagQuery); } else { userQuery = AntiTagQuery; } } //注意:这个条件必须写在最后 //注意:这个条件必须写在最后 //注意:这个条件必须写在最后 //包含,使用OR连接 if (filter.ContainTag != null) { IMongoQuery ContainTagQuery = null; foreach (var tag in filter.ContainTag) { if (ContainTagQuery != null) { //过滤标签用AND ContainTagQuery = Query.Or(ContainTagQuery, Query.EQ(nameof(Article.TagName), tag)); } else { ContainTagQuery = Query.EQ(nameof(Article.TagName), tag); } } if (userQuery != null) { userQuery = Query.Or(userQuery, ContainTagQuery); } else { userQuery = ContainTagQuery; } } return(userQuery == null ? basicQuery : Query.And(basicQuery, userQuery)); }