public bool CanSubstituteOnExam(Professor newAdministrator, Subject onSubject) { return(Exams.FirstOrNone(app => app.ForExam.OnSubject == onSubject) .Map(app => app.For(app.ForExam.Substitute(newAdministrator))) .Map(Validate) .Reduce(false)); }
public void SubstituteOnExam(Professor newAdministrator, Subject onSubject) { if (!this.CanSubstituteOnExam(newAdministrator, onSubject)) { throw new ArgumentException(); } this.Exams .Select(app => app.ForExam.OnSubject == onSubject ? app.For(app.ForExam.Substitute(newAdministrator)) : app) .ToList(); }
// Returns factory function for the exam application public Func <IExamApplication> GetExamApplicationFactory(Subject examOn, Professor administratedBy) { ExamApplicationBuilder builder = new ExamApplicationBuilder(); builder.OnSubject(examOn); builder.AdministratedBy(administratedBy); builder.TakenBy(this); if (builder.CanBuild()) { return(builder.Build); } // think of something smarter; throw new ArgumentException(); }