在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
相关产品推荐
相关产品推荐

