/// <summary> /// Creates the collection activities. /// </summary> private void CreateCollectionActivities() { // Retrieve all collection activities var query = from activity in dB.ClassTeacherSubjects join c in dB.ClassesLookup on activity.ClassId equals c.ClassId join s in dB.SubjectGrades on activity.SubjectId equals s.SubjectId join t in dB.Employees on activity.TeacherId equals t.EmployeeId join grade in dB.GradesLookup on c.GradeId equals grade.GradeId join sub in dB.Subjects on activity.SubjectId equals sub.SubjectId join stage in dB.StageIds on grade.StageId equals stage where s.GradeId == c.GradeId && t.IsActive == true && s.CollectionId != null group new { teacherId = activity.TeacherId, grade.GradeId, subjectId = activity.SubjectId, c.ClassName, ClassID = c.ClassId, NumberOfLlessonsPerWeek = s.NumberOfLessonsPerWeek, NumberOfLlessonsPerDay = s.NumberOfLessonsPerDay, CollectionID = s.CollectionId } by new { s.CollectionId, s.GradeId, activity.ClassId } into g select g; // Iterate over collections foreach (var item in query) { var activity = item.First(); var students = new Dictionary <string, int>(); item.Select(x => new { x.ClassName, x.ClassID, x.GradeId }).ToList().ForEach(x => students[x.ClassName] = x.ClassID); // Create all activities for this collection var activityBuilder = new ActivityBuilder { StudentsList = students, TeachersList = item.Select(x => (int)x.teacherId).ToList(), SubjectId = activity.subjectId, NumberOfLessonsPerDay = activity.NumberOfLlessonsPerDay, NumberOfLessonsPerWeek = activity.NumberOfLlessonsPerWeek, ActivityCounter = _counter, GradeId = item.First().GradeId, // Activity is a collection if there are more than one items in a group IsCollection = item.Count() > 1, CollectionId = activity.CollectionID }; activityBuilder.GetResults().ForEach(x => Activities.Add(x.Id, x)); _counter = activityBuilder.ActivityCounter; } }