//////////////////////////////////////СОРТИРОВКА////////////////////////////////////////////// /// <summary> /// Сортирует сотрудников в организации по различным критериям (3 критерия) /// </summary> /// <param name="critSort">Критерии сортировки: FIELDSORT.ID - по идентификатору сотрудника, /// FIELDSORT.DEP - по департаменту (отделу), /// FIELDSORT.AGE - по возрасту, /// FIELDSORT.AGE_SALARY - по возрасту и зарплате, /// FIELDSORT.DEP_AGE_SALARY - по возр. и зп. в рамках одного деп.</param> /// <returns>Лист сотрудников, отсортированных по выбранному критерию</returns> private List <Employee> getSortEmployees(FIELDSORT critSort = FIELDSORT.ID) { List <Employee> lstEmp = new List <Employee>(); foreach (Department currDep in this.departs_Org) { lstEmp.AddRange(currDep.returnEmpls()); } switch (critSort) { case FIELDSORT.ID: // Сортируем всех сотрудников по идентификатору List <Employee> sortedById = lstEmp.OrderBy(i => i.Id).ToList(); return(sortedById); case FIELDSORT.DEP: // Сортируем всех сотрудников по департаменту List <Employee> sortedByDep = lstEmp.OrderBy(d => d.Dep.Name).ToList(); return(sortedByDep); case FIELDSORT.AGE: // Сортируем всех сотрудников по возрасту List <Employee> sortedByAge = lstEmp.OrderBy(a => a.Age).ToList(); return(sortedByAge); case FIELDSORT.AGE_SALARY: // Сортируем всех сотрудников по возрасту и зарплате List <Employee> sortedByAgeSal = //lstEmp.OrderBy(a => a.Age).ThenBy(s => s.Post.Salary).ToList(); lstEmp.OrderBy(a => (a.Age, a.Post.Salary)).ToList(); return(sortedByAgeSal); case FIELDSORT.DEP_AGE_SALARY: // Сортируем сотрудников в рамках одного отдела по возрасту и зарплате List <Employee> sortedByDepAgeSal = // //lstEmp.OrderBy(d => d.Dep.Name).ThenBy(a => a.Age).ThenBy(s => s.Post.Salary).ToList(); lstEmp.OrderBy(a => (a.Dep.Name, a.Age, a.Post.Salary)).ToList(); // передаем кортеж //var tmp = lstEmp.OrderBy(a => (a.Dep.Name, a.Age, a.Post.Salary)); return(sortedByDepAgeSal); //return new List<Employee>(); } return(lstEmp); }
/// <summary> /// Вывод на экран консоли отсортированного списка сотрудников организации /// </summary> /// <param name="critSort">Критерий сортировки</param> public void printSortedEmployees(FIELDSORT critSort = FIELDSORT.ID) { Console.WriteLine($"| {"Id",2} | {"Имя",10} | {"Фамилия",15} | {"Возраст",7} |" + $"{"Департамент",20} | {"Оплата труда",12} | {"Кол-во проектов",15} |"); Console.WriteLine("------------------------------------------------------------------------------------------------------"); if (this.departs_Org != null) { foreach (Employee emp in this.getSortEmployees(critSort)) { Console.WriteLine($"| {emp.Id,2} | {emp.Name,10} | {emp.Family,15} | {emp.Age,7} |" + $"{emp.Dep.Name,20} | {emp.Post.Salary,12} | {emp.CountProjects,15} |"); } } Console.ReadKey(); }
/// <summary> /// Сортирует работников в организации по различным критериям (6 критериев) /// </summary> /// <param name="critSort">Критерии сортировки: FIELDSORT.ID - по идентификатору работника (по умолчанию), /// FIELDSORT.AGE - по возрасту, /// FIELDSORT.NAME - по имени, /// FIELDSORT.LNAME - по фамилии, /// FIELDSORT.NAME_LNAME - сначала по имени, потом по фамилии, /// FIELDSORT.LNAME_NAME - сначала по фамилии, потом по имени</param> /// <returns>Коллекция работников, отсортированных по выбранному критерию</returns> public void sortedWorkers(FIELDSORT critSort = FIELDSORT.ID) { switch (critSort) { case FIELDSORT.ID: // Сортируем всех работников по идентификатору workers = new ObservableCollection <Worker>(workers.OrderBy(item => item.Id).ToList()); break; case FIELDSORT.AGE: // Сортируем всех работников по возрасту workers = new ObservableCollection <Worker>(workers.OrderBy(item => item.Age).ToList()); break; case FIELDSORT.NAME: // Сортируем всех работников по имени workers = new ObservableCollection <Worker>(workers.OrderBy(item => item.Name).ToList()); break; case FIELDSORT.LNAME: // Сортируем всех работников по фамилии workers = new ObservableCollection <Worker>(workers.OrderBy(item => item.LastName).ToList()); break; case FIELDSORT.NAME_LNAME: // Сортируем всех работников по имени и фамилии workers = new ObservableCollection <Worker>(workers.OrderBy(item => item.Name).ThenBy(item => item.LastName).ToList()); break; case FIELDSORT.LNAME_NAME: // Сортируем всех работников по фамилии и имени workers = new ObservableCollection <Worker>(workers.OrderBy(item => item.LastName).ThenBy(item => item.Name).ToList()); break; } refreshView(); // обновляем интерфейс после сортировки }