我一直有一个艰难的时间越来越要显示以适当的方式课堂出勤表。 我在我的数据库中的表出席,我可以得到只从一个教室要显示的数据很容易,但它显示,看起来就像如果你在数据库中浏览到考勤表直接将如何看待的方式。
这可能是通过展示我的工作更容易为我解释一下:
我有以下类别:
实际的课堂教学班,或课程:
public class Course
{
public int CourseID { get; set; }
public string Title { get; set; }
public int AttendanceDate { get; set;}
public virtual ICollection<Enrollment> Enrollments { get; set; } // allows Students to be enrolled in a Course
etc. . .
}
我的学生们:
public class Student
{
public int StudentID { get; set; }
public string Name { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; } // allows Student to be enrolled in a Course
etc. . .
}
是关系学生的课程实体:
public class Enrollment
{
public int EnrollmentID { get; set; }
public int CourseID { get; set; }
public int StudentID { get; set; }
public virtual Course Course { get; set; }
public virtual Student Student { get; set; }
}
考勤数据:
public class Attendance
{
public int AttendanceID { get; set; }
public int CourseID { get; set; }
public int StudentID { get; set; }
public int AttendanceDay { get; set; } // used to set how many days people are supposed to attend this Course (each course has a different length, some are 10 day courses, some are 3, etc.)
public bool Present { get; set; } // absent or present (set to absent by default)
public virtual Course Course { get; set; }
public virtual Student Student { get; set; }
}
我的项目的流动具有教师创建课程的学生报名参加。 当学生对课程的迹象时,所有必要的考勤数据输入到使用默认值(缺席每天)考勤数据库表:
for (int i = 0; i < course.AttendingDays; i++)
{
Attendance newAttendance = new Attendance
{
CourseID = course.CourseID,
StudentID = thisStudent.StudentID,
AttendanceDay = i + 1,
Present = false
};
db.Attendance.Add(newAttendance);
db.Save();
}
所以,我有一堆考勤数据的数据库表,我不能让它在屏幕上正确显示,排序与此类似:
出席第1天| 2 | 3 | 4 | 5 |
Student1无无无无无
STUDENT2无无无无无
学生三无无无无无
希望你可以阅读。 。 。 我想这是一个考勤表相当标准的布局。
我曾尝试与排序分组依据的数据:
var model = from s in db.Attendance
where s.CourseID == 4
group s.AttendanceDay by s.StudentID into t
select new
{
StudentID = t.Key,
Days = t.OrderBy(x => x)
};
return View(model);
返回匿名类型的IEnumerable(如果我理解正确的),但我似乎无法得到这个数据做任何事情。 如果我使用“简单”台发电机(不要试图集团通过AttendanceDay号)我得到的考勤表数据就好了,但它的排序,就像它是当你查看实际的数据库表出席,不是很有用的,如果你想要一个教师阅读和编辑信息。
我想我需要一个适当的视图模型来调整匿名类型格式的IEnumerable的传入考勤数据,其次是适当地显示该视图模型的图。 。 。 但我不知道我将如何处理这一进程。
任何帮助,将不胜感激。 谢谢。
更新:
我开始想我需要采取“交叉报表” /“旋转”的优势,使用这样的: http://linqlib.codeplex.com/wikipage?title=Pivot&referringTitle=Home
任何指针?
更新2:
使用下面的接受的答案几乎完全解决了,这里是我的电流控制器:
// Generates list of Attendances specifically for current Course
var attendanceItems = db.Attendance.Where(s => s.CourseID == id);
List<Attendance> attendanceItemsList = attendanceItems.ToList();
// End of generating list of Attendances
// CURRENT PROBLEM AREA - INCOMPLETE
var student = attendanceItemsList.Select(a => a.Student).Distinct()/*.OrderBy(a => a)*/; // This works for adding one student, Cannot use OrderBy in its current state - how can I properly order by name? (right now it will order by id I believe)
List<Student> StudentList = student.ToList();;
//
// Generates list of AttendingDays specifically for current Course
Course course = db.Courses.FirstOrDefault(p => p.CourseID == id);
List<int> attDayList = new List<int>();
for (int i = 0; i < course.AttendingDays; i++)
{
attDayList.Add(i + 1);
};
// End of generating list of AttendingDays
AttendanceReportViewModel model = new AttendanceReportViewModel
{
AttendanceDays = attDayList,
Students = StudentList,
Attendances = attendanceItemsList,
};
return View(model);