/// <summary> /// 获得当前文章同一个Collection中的下一篇 /// </summary> /// <param name="IsNext"></param> /// <returns></returns> public Article GetArticleInCollection(bool IsNext) { //寻找同一个Collection //Code大(小)于当前Code的记录 //已经审核发布的 //是否发布首页标志相同的 //按照升(降)序排序,取第一条, IMongoQuery CollectionIDQuery = Query.EQ(nameof(CollectionID), CollectionID); IMongoQuery CodeQuery = IsNext ? Query.GT(nameof(Code), Code) : Query.LT(nameof(Code), Code); Sort.SortArg[] sortArgs = new Sort.SortArg[1]; sortArgs[0] = new Sort.SortArg() { FieldName = nameof(Code), SortType = IsNext ? Sort.SortType.Ascending : Sort.SortType.Descending, SortOrder = 1 }; Action <MongoCursor> setCursor = x => { x.SetSortOrder(Sort.GetSortBuilder(sortArgs)); }; //这里认为可以是所有公开的文章,通过首页文章,查看同文集的公开文章 var Articlelist = MongoDbRepository.GetRecList <Article>(Query.And(CollectionIDQuery, CodeQuery, ArticleListManager.PublicArticleQuery), setCursor); if (Articlelist.Count > 0) { return(Articlelist[0]); } else { return(null); } }
/// <summary> /// 最新发布文章 /// </summary> /// <returns></returns> public static AsideColumnBody LastArticle(int ArticleCnt) { var sortArgs = new Sort.SortArg[1]; sortArgs[0] = new Sort.SortArg { FieldName = nameof(Article.PublishDateTime), SortType = Sort.SortType.Descending, SortOrder = 1 }; Action <MongoCursor> setCursor = x => { x.SetLimit(ArticleCnt).SetSortOrder(Sort.GetSortBuilder(sortArgs)); }; var firstpage = MongoDbRepository.GetRecList <Article>(ArticleListManager.FirstPageArticleQuery, setCursor); var titlelist = new AsideColumnBody() { Title = "最新发布文章", DetailItem = new List <GenericItem>(), HrefBase = "/ArticlePage/Index?ArticleId=" }; foreach (var item in firstpage) { titlelist.DetailItem.Add(new GenericItem() { Display = item.Title, Cnt = item.GetStockCnt(), KeyId = item.Sn }); } return(titlelist); }
/// <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); }
/// <summary> /// 非黑名单的一览表 /// </summary> /// <param name="p"></param> /// <returns></returns> public static List <UserInfo> GetNoBlockUserInfo(Pages p) { var sortArgs = new Sort.SortArg[1]; sortArgs[0] = new Sort.SortArg { FieldName = MongoDbRepository.MongoKeyField, SortType = Sort.SortType.Descending, SortOrder = 1 }; Action <MongoCursor> setCursor = x => { x.SetSkip(p.SkipCount()).SetLimit(p.PageItemCount).SetSortOrder(Sort.GetSortBuilder(sortArgs)); }; return(MongoDbRepository.GetRecList <UserInfo>(NoBlockUserQuery, setCursor)); }
/// <summary> /// 获得指定小时内首页发布文章的列表 /// </summary> /// <returns></returns> public static List <Article> GetHoursFirstPageArticleList(int Hours = 48) { IMongoQuery ConfirmDateTimeQuery = Query.GT(nameof(ConfirmDateTime), DateTime.Now.AddHours(-Hours)); var sortArgs = new Sort.SortArg[1]; sortArgs[0] = new Sort.SortArg { FieldName = nameof(ConfirmDateTime), SortType = Sort.SortType.Descending, SortOrder = 1 }; Action <MongoCursor> setCursor = x => { x.SetSortOrder(Sort.GetSortBuilder(sortArgs)); }; return(MongoDbRepository.GetRecList <Article>(Query.And(ArticleListManager.FirstPageArticleQuery, ConfirmDateTimeQuery), setCursor)); }