1
Reply

How we can do left outer join using LINQ? Write a code snippet for that.


    using
    System;
    using
    System.Collections.Generic;
    using
    System.Linq;
    using
    System.Text;
    namespace
    LeftOuterJoin
    {

    class Employee
    {
    public string EmpName { get; set; }
    public int EmpAge { get; set; }
    public string EmpDeptID { get; set; }
    }
    class Department
    {
    public string DeptID { get; set; }
    public string DeptName { get; set; }
    }
    class Program
    {
    public static void Main(string[] args)
    {
    Employee objEmp1 = new Employee { EmpName = "Naga", EmpAge = 29, EmpDeptID = "1" };
    Employee objEmp2 = new Employee { EmpName = "Sundar", EmpAge = 30, EmpDeptID = "2" };
    Employee objEmp3 = new Employee { EmpName = "Siva", EmpAge = 28, EmpDeptID = "3" };
    Employee objEmp4 = new Employee { EmpName = "Shankar", EmpAge = 31, EmpDeptID = "4" };
    Department objDept1 = new Department { DeptID = "1", DeptName = "IT" };
    Department objDept2 = new Department { DeptID = "2", DeptName = "Admin" };
    Department objDept3 = new Department { DeptID = "3", DeptName = "Testing" };
    Department objDept4 = new Department { DeptID = "4", DeptName = "HR" };
    Department objDept5 = new Department { DeptID = "5", DeptName = "Sales" };
    //Creating List of Objects
    List<Employee> employees = new List<Employee> { objEmp1, objEmp2, objEmp3, objEmp4 };
    List<Department> depts = new List<Department> { objDept1, objDept2, objDept3, objDept4, objDept5 };
    //Left Side Department Right side Employee
    var DeptEmpCollection = from dept in depts
    join emp in employees on dept.DeptID equals emp.EmpDeptID into de
    from Employees in de.DefaultIfEmpty()
    select new { dept.DeptName, EmployeesName = (Employees == null ? "--No Employee--" : Employees.EmpName) };
    foreach (var EmpDept in DeptEmpCollection)
    {
    Console.WriteLine("Dept {0}, EmpName {1}", EmpDept.DeptName, EmpDept.EmployeesName);
    }
    Console.Read();
    }
    }
    }