/// <summary> /// Returns all the ScoreUnits associated with the given WorkItem /// </summary> /// <param name="workItem">WorkItem for which to return ScoreUnits</param> /// <returns>Creates new ScoreUnits for all students who have none</returns> public async Task<IEnumerable<ScoreUnit>> GetScoreUnits(WorkItem workItem) { ClassManager classManager = new ClassManager(_db, _userManager); var students = await classManager.GetAcceptedStudents(workItem.Class); var newScoreUnits = new List<ScoreUnit>(); var scoreUnits = await _db.ScoreUnits .Include(su => su.Student) .Where(su => su.WorkItem.Id == workItem.Id).ToDictionaryAsync(su => su.Student.Id); // Create new ScoreUnits for those who don't have one foreach(var student in students) { if(!scoreUnits.ContainsKey(student.Id)) { var newScoreUnit = new ScoreUnit(); newScoreUnit.WorkItem = workItem; newScoreUnit.Student = student; newScoreUnit.Grade = null; newScoreUnits.Add(newScoreUnit); } } var addedScoreUnits = _db.ScoreUnits.AddRange(newScoreUnits); await _db.SaveChangesAsync(); // Convert dictionary to list and add new ScoreUnits var result = scoreUnits.Select(kvp => kvp.Value).ToList(); result.AddRange(addedScoreUnits); return result; }
/// <summary> /// Creates a model from the given ScoreUnit /// </summary> /// <param name="scoreUnit">ScoreUnit to create the model from</param> public ScoreUnitBindingModel(ScoreUnit scoreUnit) { Id = scoreUnit.Id; StudentUserName = scoreUnit.Student.UserName; WorkItemId = scoreUnit.WorkItem.Id; Grade = scoreUnit.Grade; }