Nth Maximum Salary of employee List in LINQ

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace NthHighestSalaryINLinq  
  7. {  
  8.   
  9.     public class Employee  
  10.     {  
  11.         public string EmpName { getset; }  
  12.         public int Salary { getset; }  
  13.         public int EmpId { getset; }  
  14.   
  15.         public List<Employee> GetEmpRecord()  
  16.         {  
  17.             List<Employee> emplist = new List<Employee>();  
  18.             emplist.Add(new Employee { EmpId = 1, EmpName = " Gopal", Salary = 10000 });  
  19.             emplist.Add(new Employee { EmpId = 2, EmpName = "Naresh", Salary = 3456 });  
  20.             emplist.Add(new Employee { EmpId = 3, EmpName = "Hari", Salary = 14256 });  
  21.             emplist.Add(new Employee { EmpId = 4, EmpName = "Pradeep", Salary = 14256 });  
  22.             emplist.Add(new Employee { EmpId = 5, EmpName = "Madhu", Salary = 14256 });  
  23.             emplist.Add(new Employee { EmpId = 6, EmpName = "Sures", Salary = 15000 });  
  24.             emplist.Add(new Employee { EmpId = 7, EmpName = "Kumar M", Salary = 10000 });  
  25.             emplist.Add(new Employee { EmpId = 8, EmpName = "kali", Salary = 6000 });  
  26.             emplist.Add(new Employee { EmpId = 9, EmpName = "Manas", Salary = 2000 });  
  27.             emplist.Add(new Employee { EmpId = 10, EmpName = "Mithun", Salary = 5000 });  
  28.             emplist.Add(new Employee { EmpId = 11, EmpName = "Aryan", Salary = 7000 });  
  29.             emplist.Add(new Employee { EmpId = 12, EmpName = "Akilesh", Salary = 7000 });  
  30.             return emplist;  
  31.         }  
  32.     }  
  33.     class Program  
  34.     {  
  35.         static void Main(string[] args)  
  36.         {  
  37.             Employee e= new Employee();  
  38.             var emplist = e.GetEmpRecord();  
  39.             int whichEmpSalary = 3;  // 3rd Maximum salary  from the employee List   
  40.   
  41.            var employees = (from emp in emplist  
  42.                  group emp by emp.Salary into g  
  43.                  orderby g.Key descending   
  44.                  select new  
  45.                      {  
  46.                          EmpRecord = g.ToList()                                      
  47.                      }).ToList();  
  48.   
  49.             employees[whichEmpSalary - 1].EmpRecord  
  50.                 .ForEach(i => Console.WriteLine(" EmpId {0} Emp Name {1} earns {2}",i.EmpId, i.EmpName, i.Salary));  
  51.   
  52.             Console.ReadKey();  
  53.         }  
  54.     }  
  55. }