首页 > 解决方案 > AspNet 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  | 
================================

测试的数量是动态的。有没有办法做到这一点?找不到任何东西。我应该创建另一个模型吗?或者可以通过编辑视图来解决?

模型

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);
        }

任何帮助将不胜感激。

标签: asp.net-core

解决方案


您可以分组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();

在此处输入图像描述


推荐阅读