using System.Collections.Generic;
public static void Main()
List<Employee> employees = new List<Employee>
new Employee { EmpID =1, EmpName = "A", ManagerName = "XYZ", Salary = 20000, Comm = 180 },
new Employee { EmpID =2, EmpName = "B", ManagerName = "XYZ", Salary = 30000 , Comm = 210},
new Employee { EmpID =3, EmpName = "C", ManagerName = "ABC", Salary = 45000 , Comm= 540},
new Employee { EmpID =4, EmpName = "D", ManagerName = "XYZ", Salary = 10000 , Comm = 150},
new Employee { EmpID =5, EmpName = "E", ManagerName = "ABC", Salary = 25000 , Comm = 200},
new Employee { EmpID =6, EmpName = "F", ManagerName = "XYZ", Salary = 20000 , Comm = 440},
new Employee { EmpID =7, EmpName = "G", ManagerName = "ABC", Salary = 50000 , Comm = 150},
var query = employees.GroupBy(x => x.ManagerName)
.Select(x => new { ManagerName = x.Key,EmployeeName = x.OrderByDescending(z => z.Salary + (z.Comm ?? 0)).First().EmpName });
foreach (var emp in query)
Console.WriteLine("ManagerName : {0}, EmployeeName : {1}", emp.ManagerName, emp.EmployeeName);
public int EmpID { get; set; }
public string EmpName { get; set; }
public string ManagerName { get; set; }
public decimal Salary { get; set; }
public int? Comm { get; set; }