You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在2sxc模板中按子实体筛选并实现奖项按年份分组展示

按年份分组展示奖项的完整实现方案

没问题,我帮你把按年份分组展示奖项的需求落地,以下是适配你场景的完整模板代码和说明:

需求回顾

  • 实体:Awards,包含两个字段:Name(字符串类型,获奖者名称)、YearGiven(实体类型,存储奖项颁发年份的关联实体)
  • 目标格式:按年份分组,每行输出 [年份] ---[获奖者1] ---[获奖者2]...

完整模板代码

@using ToSic.SexyContent

@{
    // 对预处理后的奖项数据按年份分组
    var groupedAwards = sortedCategories.GroupBy(award => award.YearGiven.Year);
    // 注:如果你的YearGiven实体的年份字段不是Year,比如叫AwardYear,记得替换成对应字段名
}

@functions {
    // 存储预处理后的奖项数据
    IEnumerable<dynamic> sortedCategories;

    // 预处理数据:获取所有奖项并按年份排序
    public override void CustomizeData()
    {
        // 从App Data中获取Awards实体集合
        sortedCategories = AsDynamic(App.Data["Awards"])
            // 按年份倒序排列(最新年份在前,如需正序可换成OrderBy)
            .OrderByDescending(award => award.YearGiven.Year);
    }
}

<!-- 渲染分组后的奖项内容 -->
@foreach (var yearGroup in groupedAwards)
{
    // 将当前年份下的所有获奖者用" ---"拼接
    var awardees = string.Join(" ---", yearGroup.Select(award => award.Name));
    // 输出指定格式的内容
    <p>@yearGroup.Key ---@awardees</p>
}

关键细节说明

  • 实体字段适配:因为YearGiven是实体类型,必须访问它的具体年份字段(比如示例中的Year),请根据你实际的实体字段名调整
  • 排序控制:示例中用OrderByDescending让最新年份优先展示,如果需要按从旧到新的顺序,替换为OrderBy即可
  • 格式拼接:通过string.Join方法直接将同一年份的获奖者名称用---连接,完美匹配你要的输出格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:19:50