private void RefreshGroupsAndSubjects() { GroupsAndSubjects.Clear(); var dct = new Dictionary <int, GroupsAndSubjects>(); foreach (var value in RequestToDataBase.Instance.ReadGroupsAndSubjects()) { dct.Add(value.Group.CodeOfGroup, value); } var all = ClassGroups.Select(g => dct.TryGetValue(g.CodeOfGroup, out GroupsAndSubjects gs) ? gs : CreateEmpty(g)); foreach (var value in all) { GroupsAndSubjects.Add(value); } }
public GroupsAndSubjects[] ReadGroupsAndSubjects(int term) { List <GroupsAndSubjects> grandsb = new List <GroupsAndSubjects>(); List <SubjectInform> subjlist = new List <SubjectInform>(); if (Open()) { using (FbTransaction dbtran = conn.BeginTransaction()) { using (FbCommand selectCommand = new FbCommand()) { selectCommand.CommandText = "select id_group, name_of_group, term, groups.id_department, d1.name_of_department, id_subject, name_of_subject, subjects.id_department, d2.name_of_department, lecturehour, exercisehour, labhour, f1.id_faculty, f1.name_of_faculty " + "from (GroupsAndSubjects join Groups using(id_group) join departments d1 on d1.id_department = groups.id_department join Subjects using(id_subject) join departments d2 on d2.id_department = subjects.id_department join faculty f1 on d1.id_faculty = f1.id_faculty) where term = @Term"; selectCommand.Connection = conn; selectCommand.Transaction = dbtran; selectCommand.Parameters.AddWithValue("@Term", term); FbDataReader reader = selectCommand.ExecuteReader(); while (reader.Read()) { if (!grandsb.Exists(g => g.Group.CodeOfGroup == reader.GetInt32(0))) { var sbinf = new SubjectInform { Subject = new Subject { CodeOfSubject = reader.GetInt32(5), NameOfSubject = reader.GetString(6), Department = new Department { CodeOfDepartment = reader.GetInt32(7), NameOfDepartment = reader.GetString(8) } }, LectureHour = reader.GetInt32(9), ExerciseHour = reader.GetInt32(10), LaboratoryHour = reader.GetInt32(11) }; subjlist.Add(sbinf); var GroupsSubjects = new GroupsAndSubjects { Group = new Group { CodeOfGroup = reader.GetInt32(0), NameOfGroup = reader.GetString(1), Term = reader.GetInt32(2), Department = new Department { CodeOfDepartment = reader.GetInt32(3), NameOfDepartment = reader.GetString(4), Faculty = new Faculty { CodeOfFaculty = reader.GetInt32(12), NameOfFaculty = reader.GetString(13) } } }, InformationAboutSubjects = subjlist.ToArray() }; grandsb.Add(GroupsSubjects); subjlist.Clear(); } else { var sbinf = new SubjectInform { Subject = new Subject { CodeOfSubject = reader.GetInt32(5), NameOfSubject = reader.GetString(6), Department = new Department { CodeOfDepartment = reader.GetInt32(7), NameOfDepartment = reader.GetString(8) } }, LectureHour = reader.GetInt32(9), ExerciseHour = reader.GetInt32(10), LaboratoryHour = reader.GetInt32(11) }; foreach (var group in grandsb) { if (group.Group.CodeOfGroup == reader.GetInt32(0)) { var temp = group.InformationAboutSubjects.Append(sbinf); group.InformationAboutSubjects = temp.ToArray(); } } } } } dbtran.Commit(); return(grandsb.ToArray()); } } return(null); }