private void ImportClasses(ref OleDbConnection connection) { string DetailsSelect = "SELECT [cd].[Class] AS [Class], " + "[cd].Group AS [Group], " + "[cd].[ClassType] AS [ClassTypeID], " + "cd.[BasicClass] AS [BasicClassID], " + "cd.[ClassEdform] AS [EducationFormID]" + "FROM [Class Details] cd"; OleDbCommand DetailsQuery = new OleDbCommand(DetailsSelect, connection); List<ClassDetails> AllDetails = new List<ClassDetails> { }; using (OleDbDataReader DetailsReader = DetailsQuery.ExecuteReader()) { while (DetailsReader.Read()) { ClassDetails d = new ClassDetails(int.Parse(DetailsReader["Class"].ToString()), int.Parse(DetailsReader["Group"].ToString()), this.mTypes.Single(x => x.ID == int.Parse(DetailsReader["ClassTypeID"].ToString())).ShallowCopy(), this.mBasicClasses.Single(x => x.ID == int.Parse(DetailsReader["BasicClassID"].ToString())).ShallowCopy(), this.mEducationForms.Single(x => x.ID == int.Parse(DetailsReader["EducationFormID"].ToString())).ShallowCopy()); AllDetails.Add(d); } } string ClassesSelect = "SELECT [cc].[Class ID] AS [ID], [p].[Paralell class Name] AS [Division], [cc].[Class No] AS [Number] FROM [Code Class] AS [cc] LEFT JOIN [Code Paralell class] AS [p] ON [cc].[Class No] = [p].[Paralell class ID]"; OleDbCommand ClassesQuery = new OleDbCommand(ClassesSelect, connection); using (OleDbDataReader ClassesReader = ClassesQuery.ExecuteReader()) { while (ClassesReader.Read()) { BasicClass bc = this.mBasicClasses.Single(x => x.ID == int.Parse(ClassesReader["Number"].ToString())); int id = int.Parse(ClassesReader["ID"].ToString()); List<ClassDetails> details = AllDetails.Where(x => x.ID == id).ToList(); Class c = new Class(id, ClassesReader["Division"].ToString(), bc); foreach (var item in details) { item.SetDetailed(c); } c.SetDetails(details); c.ShortName = c.Name; this.mClasses.Add(c); } } }