Menus

Tuesday, December 4, 2012

Highest Value in each Group using LINQ



In this post, I will show you how to fetch the maximum value in each Group using LINQ
Let us consider you have the following class called Employees
C#
class Employees{
    public int EmpId { get; set; }
    public int DeptId { get; set; }
    public int Salary { get; set; }
}
You want to find out the highest salary of an Employee in each Department. Here’s the LINQ query:
C#
List<Employees> emp = new List<Employees>();
// populate emp – demo by devcurry
// emp.Add(new Employees() { EmpId = 1, DeptId = 1, Salary = 20000 });
var highest = from e in emp
            group e by e.DeptId into dptgrp
              let topsal = dptgrp.Max(x => x.salary)
            select new
            {
                Dept = dptgrp.Key,
                TopSal = dptgrp.First(y => y.Salary == topsal).EmpId,
                MaximumSalary = topsal
            };
Here's a quick description. We first get the maximum salary in a department using
let topsal = dptgrp.Max(x => x.salary)
we then use the ‘topsal’ variable to compare it against the salary of an Employee in that department and then select the Empid
TopSal = dptgrp.First(y => y.Salary == topsal).EmpId
That's it and you will get the Employee with the highest salary in each department. To print the results, just use a loop and print the values - foreach(var a in highest){ }.

No comments:

Post a Comment