【发布时间】:2015-10-29 09:50:06
【问题描述】:
我正在为一所学校制定一个日程安排项目,该项目将课程分配给可用的教室。我有这样的树表(简化):
TCourse:CourseID、CourseCode、Hours、Capacity、ScheduleID ...
TClassroom:ClassroomID、ClassroomName、配额...
TCourseClassroom:CourseClassroomID、CourseID、ClassroomID、StartHour、FinishHour、ScheduleID
08:00-20:00 之间的营业时间
下面的代码一一获取课程,并为它们分配容量最接近的教室,然后更新教室以表明该教室已被使用。 (代码翻译成英文供您阅读和理解)
public ActionResult Schedule()
{
int[] hours = { 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
using (ApsContext db = new ApsContext())
{
List<TCourse> courses = new List<TCourse>();
List<TClasssroom> clasRooms = new List<TClasssroom>();
int lastScheduleId = 0;
courses = db.TCourse.OrderBy(x => x.Quota).ToList();
foreach (var itemCourse in courses)
{
var clasRoom = db.Classroom.Where(x => x.PlanID == lastScheduleId && x.Capacity >= itemCourse.Quota).OrderBy(x => x.Capacity).FirstOrDefault();
if (classRoom != null)
{
var courseId = itemCourse.CourseID;
var classRoomId = clasRoom.ClassroomID;
var scheduleId = itemCourse.ScheduleID + 1;
db.Entry(classRoom).Entity.ScheduleID = scheduleId;
db.SaveChanges();
CourseClassroom newCourseClassroom = new CourseClassroom();
newCourseClassroom.CourseID = courseId;
newCourseClassroom.ClasssroomID = classRoomId;
newCourseClassroom.ScheduleID = scheduleId;
db.TCourseClassroom.Add(newCourseClassroom);
db.SaveChanges();
}
}
return RedirectToAction("Schedule");
}
}
此代码仅使用一次课程,但一天该教室有 12 小时。想想所有课程都是2小时。所以我需要一天使用那间教室6次。我无法想象为此目的的最佳方式。我想更新教室使用几个小时的数据库,还是我应该只用代码来做?任何想法都会有所帮助。提前致谢。
【问题讨论】:
标签: c# asp.net-mvc entity-framework linq-to-entities