using System.Collections.Generic;
public string Name { get; set; }
public int Age { get; set; }
public List<Project> Projects { get; set; }
public Employee(string name, int age)
Projects = new List<Project>();
public override string ToString()
return $"Фамилия: {Name} , Возраст: {Age}";
public string Name { get; set; }
public DateTime Date { get; set; }
public List<Employee> Employees { get; set; }
public Project(string name, DateTime date)
Employees = new List<Employee>();
public override string ToString()
return $"Проект: {Name} , Начало: {Date.ToShortDateString()}";
public string Name { get; set; }
public List<Project> Projects { get; set; }
public List<Employee> Employees { get; set; }
public Company(string name)
Projects = new List<Project>();
Employees = new List<Employee>();
public void AddProject(Project p, List<Employee> e)
public IEnumerable<Employee> GetEmployeesOnTwoOrMoreProjects()
var EmpTwoOrMorePr = Projects.SelectMany(a => a.Employees);
return EmpTwoOrMorePr.Where(e => e.Projects.Count() > 1).OrderBy(e => e.Name).Distinct();
public IEnumerable<Project> GetProjectsAfterDate(DateTime Date)
return Projects.Where(p => p.Date > Date).OrderByDescending(p => p.Date);
public int CountProjects()
return Projects.Where(p => p.Date >= DateTime.Today.AddYears(-1) && p.Employees.Where(e => e.Age <= 30).Count() > 0).Count();
public string GetOldEmployeeName()
var emp = Projects.SelectMany(a => a.Employees).Where(e => e.Projects.Count() == 1 && e.Projects[0].Date >= new DateTime(DateTime.Today.Year, 1, 1));
int MaxAge = emp.Max(e => e.Age);
return emp.First(e => e.Age == MaxAge).Name;
public static void Main(string[] args)
Company company = new Company("Google");
Console.WriteLine("Список сотрудников, работающих на двух и более проектах (в алфавитном порядке):");
IEnumerable<Employee> employees = company.GetEmployeesOnTwoOrMoreProjects();
foreach (Employee e in employees)
Console.WriteLine("Список проектов, начавшихся после определенной даты(в порядке убывания даты):");
IEnumerable<Project> projects = company.GetProjectsAfterDate(new DateTime(2010, 1, 1));
foreach (Project p in projects)
Console.WriteLine("Количество проектов, продолжающихся не более года, в которых, среди всех сотрудников, есть один или несколько человек, не старше 30 лет:");
Console.WriteLine(company.CountProjects());
Console.WriteLine("Фамилия самого старшего сотрудника, работающего строго над одним проектом, начавшемся в этом году:");
Console.WriteLine(company.GetOldEmployeeName());
public static void FillData(Company company)
Project photos = new Project("Google Photos", new DateTime(2015, 5, 28));
Project translate = new Project("Google Translate", new DateTime(2006, 4, 28));
Project chrome = new Project("Google Chrome", new DateTime(2008, 9, 2));
Project gmail = new Project("Gmail", new DateTime(2004, 4, 1));
Project calendar = new Project("Google Calendar", new DateTime(2006, 4, 13));
Project maps = new Project("Google Maps", new DateTime(2005, 2, 8));
Project neighbourly = new Project("Google Neighbourly", new DateTime(2020, 1, 14));
Project reformer = new Project("Reformer", new DateTime(2020, 2, 13));
Project search = new Project("Google Search", new DateTime(1997, 5, 12));
Project oneToday = new Project("Google One Today", new DateTime(2020, 3, 11));
Employee employee1 = new Employee("Смирнов", 26);
Employee employee2 = new Employee("Иванов", 43);
Employee employee3 = new Employee("Кузнецов", 54);
Employee employee4 = new Employee("Соколов", 24);
Employee employee5 = new Employee("Попов", 34);
Employee employee6 = new Employee("Лебедев", 28);
Employee employee7 = new Employee("Козлов", 22);
Employee employee8 = new Employee("Новиков", 55);
Employee employee9 = new Employee("Морозов", 42);
Employee employee10 = new Employee("Петров", 27);
Employee employee11 = new Employee("Волков", 32);
Employee employee12 = new Employee("Соловьёв", 38);
Employee employee13 = new Employee("Васильев", 43);
Employee employee14 = new Employee("Зайцев", 21);
Employee employee15 = new Employee("Павлов", 33);
Employee employee16 = new Employee("Семёнов", 56);
Employee employee17 = new Employee("Голубев", 45);
Employee employee18 = new Employee("Виноградов", 44);
Employee employee19 = new Employee("Богданов", 27);
Employee employee20 = new Employee("Воробьёв", 21);
Employee employee21 = new Employee("Фёдоров", 62);
Employee employee22 = new Employee("Михайлов", 37);
Employee employee23 = new Employee("Беляев", 38);
Employee employee24 = new Employee("Тарасов", 39);
Employee employee25 = new Employee("Белов", 40);
Employee employee26 = new Employee("Комаров", 41);
Employee employee27 = new Employee("Орлов", 42);
Employee employee28 = new Employee("Киселёв", 33);
Employee employee29 = new Employee("Макаров", 34);
Employee employee30 = new Employee("Андреев", 35);
Employee employee31 = new Employee("Ковалёв", 36);
Employee employee32 = new Employee("Ильин", 31);
Employee employee33 = new Employee("Гусев", 37);
Employee employee34 = new Employee("Титов", 38);
Employee employee35 = new Employee("Кузьмин", 39);
Employee employee36 = new Employee("Кудрявцев", 40);
Employee employee37 = new Employee("Баранов", 21);
Employee employee38 = new Employee("Куликов", 25);
Employee employee39 = new Employee("Алексеев", 27);
Employee employee40 = new Employee("Степанов", 29);
Employee employee41 = new Employee("Яковлев", 37);
Employee employee42 = new Employee("Сорокин", 44);
Employee employee43 = new Employee("Сергеев", 48);
Employee employee44 = new Employee("Романов", 53);
Employee employee45 = new Employee("Захаров", 25);
Employee employee46 = new Employee("Борисов", 37);
Employee employee47 = new Employee("Королёв", 47);
Employee employee48 = new Employee("Герасимов", 41);
Employee employee49 = new Employee("Пономарёв", 40);
Employee employee50 = new Employee("Григорьев", 30);
company.AddProject(photos, new List<Employee> { employee1, employee2, employee3, employee4, employee5, employee6 });
company.AddProject(translate, new List<Employee> { employee10, employee11, employee12, employee13, employee14, employee15 });
company.AddProject(chrome, new List<Employee> { employee20, employee21, employee22, employee23, employee24, employee25 });
company.AddProject(gmail, new List<Employee> { employee30, employee31, employee32, employee33, employee34, employee35 });
company.AddProject(calendar, new List<Employee> { employee40, employee41, employee42, employee43, employee44, employee45 });
company.AddProject(maps, new List<Employee> { employee46, employee47, employee48, employee49, employee50, employee45 });
company.AddProject(neighbourly, new List<Employee> { employee36, employee37, employee38, employee39, employee6, employee7 });
company.AddProject(reformer, new List<Employee> { employee26, employee27, employee28, employee29, employee15, employee16 });
company.AddProject(search, new List<Employee> { employee8, employee9, employee17, employee29, employee15, employee3 });
company.AddProject(oneToday, new List<Employee> { employee18, employee19, employee31, employee27, employee15, employee46 });