首页 > 解决方案 > 如何仅在 api json 中获取年份

问题描述

在这里,我创建了一个 API,在其中我从表列createdAt中获取平均值和年份。

public async Task<ICollection<SchoolSystemOverallAveragePerYearVm>> GetSchoolSystemOverallAveragePerYear(Guid schoolSystemId)
{
    var schoolsystemYearAvg = _GpsContext.SchoolSystem.Where(s => s.Id == schoolSystemId);
    var tem = _GpsContext.AssignmentStudents
        .Include(a => a.Assignment)
        .ThenInclude(s => s.SchoolSystems)
        .GroupBy(g => // Group by your Key-Values Grade and Course (You could take names instead of ids. Just for simplification)
            new {
                Year = g.CreatedAt,// CreateAt is the column name in the table datetime type.
            })
        .Select(g => // Select the result into an anonymous type
            new SchoolSystemOverallAveragePerYearVm
            {
                Year = g.Key.Year.ToString(),
                AverageObtainedMarks = g.Average(a => a.ObtainedMarks) // and an average ObtainedMarks from objects matching the key
            });

    List<SchoolSystems> schoolSystems = await schoolsystemYearAvg.ToListAsync();

    var averageYearVms = await tem.ToListAsync();
    return averageYearVms;
}

现在 JSON 结果是这样的:

 [
  {
    "averageObtainedMarks": 90,
    "year": "04/04/2019 00:00:00"
  },
  {
    "averageObtainedMarks": 30,
    "year": "04/04/2020 00:00:00"
  }
]

我只想像甲酸2020一样获得年份

标签: asp.net.net-core

解决方案


如何按年份而不是日期分组:

public async Task<ICollection<SchoolSystemOverallAveragePerYearVm>> GetSchoolSystemOverallAveragePerYear(Guid schoolSystemId)
{
    var tem = _GpsContext.AssignmentStudents
        .Include(a => a.Assignment)
        .ThenInclude(s => s.SchoolSystems)
        // Group by year - CreatedAt is nullable DateTime
        .GroupBy(g => g.CreatedAt?.Year)
        .Select(g => new SchoolSystemOverallAveragePerYearVm
            {
                Year = g.Key.ToString(),
                AverageObtainedMarks = g.Average(a => a.ObtainedMarks) // and an average ObtainedMarks from objects matching the key
            });

    var averageYearVms = await tem.ToListAsync();
    return averageYearVms;
}

我删除了未使用的代码,并按单个值而不是匿名类型分组。

这将为您提供以下 JSON:

[
  {
    "averageObtainedMarks": 90,
    "year": "2019"
  },
  {
    "averageObtainedMarks": 30,
    "year": "2020"
  }
]

推荐阅读