C# 3.0 : Joining two in-memory collection through LINQ

LINQ allows us to join different collection source provided we are mapping with two properties with the same type. It is easy, it is quick and it is concise.

 

 

//Create Employee Class

class Employee

{

    public int ID { get; set; }

    public string Name { get; set; }

   public string ManagerId { get; set; }

}

//Create Manager Class

class Manager

{

    public string Id { get; set; }

    public string Name { get; set; }

}

class Program

{

    //Create the List<Manager>

    static List<Manager> GetManagers()

    {

        return new List<Manager>

        {

            new Manager(){Id = "M1", Name = "Manager 1"},

            new Manager(){Id = "M2", Name = "Manager 2"}

        };

    }

    //Create the List<Employee>

    static List<Employee> GetEmployees()

    {

        return new List<Employee>

        {

            new Employee(){ID = 1, Name = "A", ManagerId = "M1"},

            new Employee(){ID = 2, Name = "B", ManagerId = "M1"},

            new Employee(){ID = 3, Name = "C", ManagerId = "M1"},

            new Employee(){ID = 4, Name = "D", ManagerId = "M1"},

            new Employee(){ID = 5, Name = "E", ManagerId = "M2"},

            new Employee(){ID = 6, Name = "F", ManagerId = "M2"},

            new Employee(){ID = 7, Name = "G", ManagerId = "M2"},

            new Employee(){ID = 9, Name = "H", ManagerId = "M5"}

        };

    }

    static void Main(string[] args)

    {

        /*Doing join between two sources

         *The record will be retieved only the mathched data

             * Output will give values from both the collection

             */

            var query = from e in GetEmployees()

                        join m in GetManagers() on e.ManagerId equals m.Id

                        select new

                        {

                            EmployeeId = e.ID,

                            EmployeeName = e.Name,

                            Manager = m.Name

                        };

            foreach (var o in query)

            {

                Console.WriteLine("{0}-{1} [{2}]",

               o.EmployeeId,

                    o.EmployeeName,

                    o.Manager);

            }

        }

    }

 

Namoskar!!!