Inner Join and Outer Join In DataTable using LINQ

Introduction
 
In this blog we will discuss about how to implement Inner Join and outer join between two DataTable using Linq.
 
DataTable
 
This class represents to store data in rows and columns. It is present in System.Data namespace. You can add rows, columns programmatically.
 
Using Code 
 
We have to create two DataTables. One is "Emp" which contains two columns called EmpId and EmpName and second table is "EmpGrade" which contains two columns EmpId and Grade. And column EmpId of two tables are referring each other. Here is the code to create DataTables: 
  1. DataTable dt = new DataTable();    
  2. DataRow dr = null;  
  3. dt.TableName = "Emp";    
  4.      
  5. dt.Columns.Add("EmpId"typeof(int));    
  6. dt.Columns.Add("EmpName"typeof(string));  
  7.      
  8. dr = dt.NewRow();    
  9. dr["EmpId"] = 1;    
  10. dr["EmpName"] = "Manas";   
  11. dt.Rows.Add(dr);    
  12.      
  13. DataRow dr1 = null;    
  14. dr1 = dt.NewRow();    
  15. dr1["EmpId"] = 2;    
  16. dr1["EmpName"] = "Prakas";   
  17. dt.Rows.Add(dr1);    
  18.      
  19. DataRow dr2 = null;    
  20. dr2 = dt.NewRow();    
  21. dr2["EmpId"] = 3;    
  22. dr2["EmpName"] = "Akas";    
  23. dt.Rows.Add(dr2);    
  24.      
  25. DataTable dt2 = new DataTable();    
  26.   
  27. dt2.TableName = "EmpGrade";    
  28. dt2.Columns.Add("EmpId"typeof(int));    
  29. dt2.Columns.Add("Grade"typeof(int));    
  30.      
  31. DataRow drgrade = null;    
  32. drgrade = dt2.NewRow();    
  33. drgrade["EmpId"] = 1;    
  34. drgrade["Grade"] = 3;    
  35. dt2.Rows.Add(drgrade);      
  36.      
  37. DataRow drgrade2 = null;    
  38. drgrade2 = dt2.NewRow();    
  39. drgrade2["EmpId"] = 3;    
  40. drgrade2["Grade"] = 2;    
  41. dt2.Rows.Add(drgrade2);   
Inner Join 
  1. var JoinResult = (from p in dt.AsEnumerable()    
  2.                   join t in dt2.AsEnumerable()    
  3.                   on p.Field<string>("EmpId") equals t.Field<string>("EmpId")    
  4.                   select new    
  5.                   {    
  6.                       EmpId = p.Field<int>("EmpId"),
  7.                       EmpName = p.Field<sting>("EmpName"),                        
  8.                       Grade = t.Field<int>("Grade")      
  9.                   }).ToList();    
Result
 
EmpId    EmpName    Grade
  1            Manas           3
  3            Akas             2 
 
Outer Join(Left)
  1. var JoinResult = (from p in dt.AsEnumerable()  
  2.     join t in dt2.AsEnumerable()  
  3.     on p.Field<string>("EmpId") equals t.Field<string>("EmpId") into tempJoin  
  4.     from leftJoin in tempJoin.DefaultIfEmpty()  
  5.     select new  
  6.    { 
  7.        EmpId = p.Field<int>("EmpId"), 
  8.        EmpName = p.Field<string>("EmpName"),                      
  9.        Grade = leftJoin == null ? 0 : leftJoin.Field<int>("Grade")    
  10.    }).ToList();  
Result:
 
EmpId      EmpName      Grade
1                Manas             3
2                Prakas            0 
3                Akas               2
 
Conclusion 
 
In this blog we discussed how to implement Inner join and outer join between two DataTable using Linq.