AspNet Core将多条记录显示为一行,表中有多列

时间:2019-06-12 14:33:24

标签: asp.net-core

我在使用表格视图时遇到了麻烦。

我希望我的桌子看起来像这样

  Name  | Test1 | Test2 | Test3  
================================
Anna    | 70    |   51  |  90
================================
Jack    | 56    |   77  |  82
================================

现在我有

  Name  | Grade |   Test   | 
================================
Anna    | 70    |   Test1  | 
================================
Anna    | 51    |   Test2  | 
================================
Anna    | 90    |   Test3  | 
================================
Jack    | 56    |   Test1  | 
================================
Jack    | 77    |   Test2  | 
================================
Jack    | 82    |   Test3  | 
================================

测试数量是动态的。 有什么办法吗?找不到任何东西。 我应该创建另一个模型吗?还是可以通过编辑View来解决?

型号

public class StudentsWork
    {
        [Key]
        public int IdStudentsWork { get; set; }
        public int? Grade { get; set; }
        public DateTime? Date { get; set; }
        public int Student_id { get; set; }
        public int Course_id { get; set; }
        public int Test_id { get; set; }
        [ForeignKey("Student_id")]
        public Student StudentId { get; set; }
        [ForeignKey("Course_id")]
        public Course CourseId { get; set; }
        [ForeignKey("Test_id")]
        public Test TestId { get; set; }
    }

控制器

    public async Task<IActionResult> Group(int? id,int id_group)
        {
            var group = await _context.StudentsWork
                .Include(p => p.StudentId)
                .ThenInclude(p => p.GroupId)
                .Include(p => p.CourseId)
                .Include(p => p.TestId)
                .Where(c => c.Course_id == id && c.StudentId.Group_id == id_group)
                .ToListAsync();       
            return View(group);
        }

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以按StudentId分组,并为每个组选择一个字典以获取测试名称和成绩:

var query = db.StudentsWork.Include(p => p.StudentId)
.Include(p => p.CourseId)
.Include(p => p.TestId)
.GroupBy(c => c.StudentId)
.Select(g => new
{
    StudentName=g.Key.Name,

    TestGrade = g.ToDictionary(t => t.TestId.Name, t => t.Grade)
});

var result = query.ToList();

enter image description here