dimitrix85

IntroductionToEntityFramework

Feb 27th, 2019
22
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using Microsoft.EntityFrameworkCore;
  2. using SoftUni.Data;
  3. using SoftUni.Models;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Globalization;
  7. using System.Linq;
  8. using System.Text;
  9.  
  10. namespace SoftUni
  11. {
  12.     public class StartUp
  13.     {
  14.         public static void Main(string[] args)
  15.         {
  16.             using (SoftUniContext context = new SoftUniContext())
  17.             {
  18.                 Console.WriteLine(IncreaseSalaries(context));
  19.             }
  20.         }
  21.         //15
  22.         public static string RemoveTown(SoftUniContext context)
  23.         {
  24.             StringBuilder sb = new StringBuilder();
  25.             var empToNull = context.Employees.Where(x => x.Address.Town.Name == "Seattle").ToList(); ;
  26.             var addressToDel = context.Addresses.Where(n => n.Town.Name == "Seattle").ToList();
  27.             var townToDel = context.Towns.FirstOrDefault(n => n.Name == "Seattle");
  28.  
  29.  
  30.             foreach (var emp in empToNull)
  31.             {
  32.                 emp.AddressId = null;
  33.             }
  34.             context.SaveChanges();
  35.  
  36.             context.Addresses.RemoveRange(addressToDel);
  37.             int count = context.SaveChanges();
  38.             context.Towns.Remove(townToDel);
  39.             context.SaveChanges();
  40.  
  41.             sb.AppendLine($"{count} addresses in Seattle were deleted");
  42.  
  43.             return sb.ToString().Trim();
  44.         }
  45.  
  46.  
  47.         //14
  48.         public static string DeleteProjectById(SoftUniContext context)
  49.         {
  50.             StringBuilder sb = new StringBuilder();
  51.  
  52.             var projectToDelete = context.EmployeesProjects.Where(p => p.ProjectId == 2);
  53.  
  54.             context.EmployeesProjects.RemoveRange(projectToDelete);
  55.             var projectToDel = context.Projects.FirstOrDefault(p => p.ProjectId == 2);
  56.             context.Projects.Remove(projectToDel);
  57.             context.SaveChanges();
  58.  
  59.             var projectToPrint = context.Projects.Take(10)
  60.                 .Select(p => new
  61.                 {
  62.                     p.Name
  63.                 }).ToList();
  64.  
  65.             foreach (var pro in projectToPrint)
  66.             {
  67.                 sb.AppendLine(pro.Name);
  68.             }
  69.  
  70.             return sb.ToString().Trim();
  71.         }
  72.  
  73.  
  74.         //13
  75.         public static string GetEmployeesByFirstNameStartingWithSa(SoftUniContext context)
  76.         {
  77.             StringBuilder sb = new StringBuilder();
  78.  
  79.             var emp = context.Employees.Where(n => EF.Functions.Like(n.FirstName, ("sa%")))
  80.                 .Select(e => new
  81.                 {
  82.                     e.FirstName,
  83.                     e.LastName,
  84.                     e.JobTitle,
  85.                     e.Salary
  86.                 }).OrderBy(x => x.FirstName).ThenBy(x => x.LastName).ToList();
  87.  
  88.             foreach (var item in emp)
  89.             {
  90.                 sb.AppendLine($"{item.FirstName} {item.LastName} - {item.JobTitle} - (${item.Salary:F2})");
  91.             }
  92.  
  93.             return sb.ToString().Trim();
  94.         }
  95.  
  96.  
  97.         //12
  98.         public static string IncreaseSalaries(SoftUniContext context)
  99.         {
  100.             StringBuilder sb = new StringBuilder();
  101.  
  102.             List<String> depContr = new List<string>()
  103.             {
  104.                 "Engineering","Tool Design","Marketing","Information Services"
  105.             };
  106.  
  107.             List<Employee> employees = context.Employees
  108.                 .Where(d => depContr.Contains(d.Department.Name))
  109.                 .OrderBy(e => e.FirstName).ThenBy(e => e.LastName).ToList();
  110.  
  111.             foreach (var item in employees)
  112.             {
  113.                 item.Salary *= 1.12M;
  114.             }
  115.  
  116.             context.SaveChanges();
  117.  
  118.             List<Employee> updEmp = context.Employees
  119.                 .Where(d => depContr.Contains(d.Department.Name))
  120.                 .OrderBy(e => e.FirstName).ThenBy(e => e.LastName).ToList();
  121.  
  122.             foreach (var item in updEmp)
  123.             {
  124.                 sb.AppendLine($"{item.FirstName} {item.LastName} (${item.Salary:F2})");
  125.             }
  126.  
  127.  
  128.  
  129.             return sb.ToString().Trim();
  130.         }
  131.  
  132.  
  133.         //11
  134.         public static string GetLatestProjects(SoftUniContext context)
  135.         {
  136.             StringBuilder sb = new StringBuilder();
  137.  
  138.             var projects = context.Projects.OrderByDescending(p => p.StartDate).Take(10)
  139.                 .Select(p => new
  140.                 {
  141.                     p.Name,
  142.                     p.Description,
  143.                     p.StartDate
  144.                 }).OrderBy(p => p.Name).ToList();
  145.  
  146.  
  147.             foreach (var pro in projects)
  148.             {
  149.                 sb.AppendLine(pro.Name);
  150.                 sb.AppendLine(pro.Description);
  151.                 sb.AppendLine(pro.StartDate.ToString("M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture));
  152.             }
  153.  
  154.             return sb.ToString().Trim();
  155.         }
  156.  
  157.         //10
  158.         public static string GetDepartmentsWithMoreThan5Employees(SoftUniContext context)
  159.         {
  160.             StringBuilder sb = new StringBuilder();
  161.  
  162.             var departments = context.Departments
  163.                 .Where(d => d.Employees.Count > 5)
  164.                 .OrderBy(d => d.Employees.Count).ThenBy(d => d.Name)
  165.                 .Select(d => new
  166.                 {
  167.                     d.Name,
  168.                     ManagerName = d.Manager.FirstName + " " + d.Manager.LastName,
  169.                     Employees = d.Employees.Select(e => new
  170.                     {
  171.                         EmployeeName = e.FirstName + " " + e.LastName,
  172.                         e.JobTitle
  173.                     }).OrderBy(n => n.EmployeeName).ToList()
  174.                 }).ToList();
  175.  
  176.             foreach (var dep in departments)
  177.             {
  178.                 sb.AppendLine($"{dep.Name} - {dep.ManagerName}");
  179.  
  180.                 foreach (var emp in dep.Employees)
  181.                 {
  182.                     sb.AppendLine($"{emp.EmployeeName} - {emp.JobTitle}");
  183.                 }
  184.             }
  185.  
  186.  
  187.             return sb.ToString().Trim();
  188.         }
  189.  
  190.         //09
  191.         public static string GetEmployee147(SoftUniContext context)
  192.         {
  193.             StringBuilder sb = new StringBuilder();
  194.  
  195.             var emp = context.Employees
  196.                 .Select(e => new
  197.                 {
  198.                     e.FirstName,
  199.                     e.LastName,
  200.                     e.JobTitle,
  201.                     e.EmployeeId,
  202.                     Projects = e.EmployeesProjects.Select(p => new
  203.                     {
  204.                         p.Project.Name
  205.                     }).OrderBy(n => n.Name).ToList()
  206.                 })
  207.                 .FirstOrDefault(i => i.EmployeeId == 147);
  208.  
  209.             sb.AppendLine($"{emp.FirstName} {emp.LastName} - {emp.JobTitle}");
  210.  
  211.             foreach (var project in emp.Projects)
  212.             {
  213.                 sb.AppendLine(project.Name);
  214.             }
  215.  
  216.  
  217.  
  218.             return sb.ToString().Trim();
  219.         }
  220.  
  221.         //08
  222.         public static string GetAddressesByTown(SoftUniContext context)
  223.         {
  224.             StringBuilder stringBuilder = new StringBuilder();
  225.  
  226.             var addressesCount = context.Addresses
  227.                 .Select(a => new
  228.                 {
  229.                     a.AddressText,
  230.                     a.Town.Name,
  231.                     a.Employees.Count,
  232.                 }).OrderByDescending(c => c.Count).ThenBy(t => t.Name).Take(10).ToList();
  233.  
  234.             foreach (var address in addressesCount)
  235.             {
  236.                 stringBuilder.AppendLine($"{address.AddressText}, {address.Name} - {address.Count} employees");
  237.             }
  238.  
  239.             return stringBuilder.ToString().Trim();
  240.         }
  241.  
  242.         //07
  243.         public static string GetEmployeesInPeriod(SoftUniContext context)
  244.         {
  245.             StringBuilder sb = new StringBuilder();
  246.  
  247.  
  248.             var employeeProjectList = context.Employees
  249.                 .Where(p => p.EmployeesProjects.Any(s => s.Project.StartDate.Year >= 2001 && s.Project.StartDate.Year <= 2003)).Take(10)
  250.                 .Select(e => new
  251.                 {
  252.                     EmployeeName = e.FirstName + " " + e.LastName,
  253.                     ManagerName = e.Manager.FirstName + " " + e.Manager.LastName,
  254.                     Projects = e.EmployeesProjects
  255.                     .Select(t => new
  256.                     {
  257.                         t.Project.Name,
  258.                         t.Project.StartDate,
  259.                         t.Project.EndDate
  260.                     }).ToList()
  261.                 })
  262.                .ToList();
  263.  
  264.             foreach (var emp in employeeProjectList)
  265.             {
  266.                 sb.AppendLine($"{emp.EmployeeName} - Manager: {emp.ManagerName}");
  267.  
  268.                 foreach (var project in emp.Projects)
  269.                 {
  270.                     string startDate = project.StartDate.ToString("M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
  271.  
  272.                     string endDate = project.EndDate.HasValue ? project.EndDate.Value.ToString("M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture) : "not finished";
  273.  
  274.                     sb.AppendLine($"--{project.Name} - {startDate} - {endDate}");
  275.                 }
  276.             }
  277.  
  278.             return sb.ToString().Trim();
  279.         }
  280.  
  281.         //06
  282.         public static string AddNewAddressToEmployee(SoftUniContext context)
  283.         {
  284.             StringBuilder sb = new StringBuilder();
  285.  
  286.             Address address = new Address
  287.             {
  288.                 AddressText = "Vitoshka 15",
  289.                 TownId = 4
  290.             };
  291.  
  292.             context.Addresses.Add(address);
  293.  
  294.             List<Employee> nakovs = context.Employees.Where(e => e.LastName == "Nakov").ToList();
  295.  
  296.             foreach (var item in nakovs)
  297.             {
  298.                 item.Address = address;
  299.             }
  300.  
  301.             context.SaveChanges();
  302.  
  303.             var employees = context.Employees.OrderByDescending(e => e.AddressId)
  304.                 .Select(e => e.Address.AddressText).Take(10).ToList();
  305.  
  306.  
  307.             foreach (var item in employees)
  308.             {
  309.                 sb.AppendLine(item);
  310.             }
  311.  
  312.             return sb.ToString().TrimEnd();
  313.         }
  314.         //05
  315.         public static string GetEmployeesFromResearchAndDevelopment(SoftUniContext context)
  316.         {
  317.             StringBuilder sb = new StringBuilder();
  318.  
  319.             var emps = context.Employees
  320.                 .Select(e => new
  321.                 {
  322.                     e.FirstName,
  323.                     e.LastName,
  324.                     DepartmentName = e.Department.Name,
  325.                     e.Salary
  326.                 }).Where(d => d.DepartmentName == "Research and Development")
  327.                 .OrderBy(s => s.Salary)
  328.                 .ThenByDescending(n => n.FirstName);
  329.  
  330.             foreach (var emp in emps)
  331.             {
  332.                 sb.AppendLine($"{emp.FirstName} {emp.LastName} from Research and Development - ${emp.Salary:F2}");
  333.             }
  334.  
  335.  
  336.  
  337.             return sb.ToString().TrimEnd();
  338.         }
  339.  
  340.         //04
  341.         public static string GetEmployeesWithSalaryOver50000(SoftUniContext context)
  342.         {
  343.             StringBuilder sb = new StringBuilder();
  344.  
  345.             var empOver50000 = context.Employees
  346.                 .Select(e => new
  347.                 {
  348.                     e.FirstName,
  349.                     e.Salary
  350.                 }).Where(s => s.Salary > 50000).OrderBy(e => e.FirstName);
  351.  
  352.             foreach (var emp in empOver50000)
  353.             {
  354.                 sb.AppendLine($"{emp.FirstName} - {emp.Salary:F2}");
  355.             }
  356.  
  357.             return sb.ToString().TrimEnd();
  358.         }
  359.         //03
  360.         public static string GetEmployeesFullInformation(SoftUniContext context)
  361.         {
  362.             StringBuilder sb = new StringBuilder();
  363.  
  364.             var emps = context.Employees
  365.                 .Select(e => new
  366.                 {
  367.                     e.FirstName,
  368.                     e.LastName,
  369.                     e.MiddleName,
  370.                     e.JobTitle,
  371.                     e.Salary,
  372.                     e.EmployeeId
  373.                 }).OrderBy(e => e.EmployeeId);
  374.  
  375.             foreach (var emp in emps)
  376.             {
  377.                 sb.AppendLine($"{emp.FirstName} {emp.LastName} {emp.MiddleName} {emp.JobTitle} {emp.Salary:F2}");
  378.             }
  379.  
  380.  
  381.             return sb.ToString().TrimEnd();
  382.         }
  383.     }
  384. }
RAW Paste Data