You need to enable JavaScript to run this app. ASP.Net Core 如何在博客详情页按创建日期获取上下篇博文
优惠活动
大模型
产品
解决方案
定价
更多

ASP.Net Core 如何在博客详情页按创建日期获取上下篇博文

博客详情页上下篇功能实现方案

现有代码的常见问题

  • 命名逻辑和通用定义偏差:你当前的博客列表是按CreatedDate倒序排列(最新的内容在前),常规的上下篇定义通常是:
    • 上一篇:比当前博客创建时间更晚(更新)的第一条内容
    • 下一篇:比当前博客创建时间更早(更旧)的第一条内容
      你现有代码里previousBlog取创建时间更小的、nextBlog取创建时间更大的,刚好和通用定义相反,需要先对齐业务需求,避免展示反了。
  • 性能问题:现有逻辑是先加载全量启用的博客到内存,再筛选上下篇,当博客总量较大时,会产生不必要的内存占用和数据库查询开销,完全可以把筛选逻辑下推到数据库层,只返回需要的2条数据。

优化实现方案

1. 小数据量场景(博客总量<1000条)

如果不想改动现有内存查询的逻辑,只需要调整排序和取值逻辑即可:

// 现有按创建日期倒序的全量列表 blogsByDate
// 上一篇(更新的内容):找创建时间大于当前值的,倒序列表里的第一个元素就是最接近当前时间的
var previousBlog = blogsByDate.FirstOrDefault(p => p.CreatedDate > blog.CreatedDate);
// 下一篇(更旧的内容):找创建时间小于当前值的,倒序列表里的第一个元素就是最接近当前时间的
var nextBlog = blogsByDate.FirstOrDefault(p => p.CreatedDate < blog.CreatedDate);

注意:如果用First的话,找不到匹配项会抛异常,建议换成FirstOrDefault做空值兼容。

2. 大数据量场景(推荐)

直接在数据库层完成筛选,只查询需要的上下篇数据,性能最优:

// 查上一篇:比当前博客创建时间更晚的,取最接近当前时间的第一条
var previousBlog = await _db.Blog
    .Include(p => p.Sitemap)
    .Where(p => p.Enabled && p.CreatedDate > blog.CreatedDate)
    .OrderBy(p => p.CreatedDate) // 升序排列,最小的大于当前时间的就是最近的新文
    .ThenBy(p => p.Id) // 加Id兜底,避免同创建时间的取值错乱
    .FirstOrDefaultAsync();

// 查下一篇:比当前博客创建时间更早的,取最接近当前时间的第一条
var nextBlog = await _db.Blog
    .Include(p => p.Sitemap)
    .Where(p => p.Enabled && p.CreatedDate < blog.CreatedDate)
    .OrderByDescending(p => p.CreatedDate) // 降序排列,最大的小于当前时间的就是最近的旧文
    .ThenByDescending(p => p.Id) // 加Id兜底
    .FirstOrDefaultAsync();

边界场景处理

  • 如果当前博客是全站最新的,previousBlog会返回空,前端需要显示对应空状态(比如「暂无更新的上一篇内容」)
  • 如果当前博客是全站最早发布的,nextBlog会返回空,前端做对应空态处理即可。

页面效果参考

页面效果示意图


内容的提问来源于stack exchange,提问作者ofcskn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 15:36:04