我在使用表格视图时遇到了麻烦。
我希望我的桌子看起来像这样
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);
}
任何帮助将不胜感激。
答案 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();