INNER JOIN में केवल मिलान करने वाले एलिमेंट्स परिणाम सेट में शामिल होते हैं। नॉन-मैचिंग एलिमेंट्स बाहर रह जाते हैं।
LEFT OUTER JOIN में सभी मिलान करने वाले एलिमेंट्स के साथ-साथ बाएं कलेक्शन के सभी नॉन-मैचिंग एलिमेंट्स भी परिणाम सेट में शामिल होते हैं।
उदाहरण: Department और Employee क्लासेस
ध्यान दें कि Employee "Mary" का कोई डिपार्टमेंट असाइन नहीं है। इनर जॉइन उसके रिकॉर्ड को शामिल नहीं करेगा, जबकि लेफ्ट आउटर जॉइन करेगा।
कोड उदाहरण
static class Program
{
static void Main(string[] args)
{
var result = Employee.GetAllEmployees()
.GroupJoin(Department.GetAllDepartments(),
e => e.DepartmentID,
d => d.ID,
(emp, depts) => new { emp, depts })
.SelectMany(z => z.depts.DefaultIfEmpty(),
(a, b) => new
{
EmployeeName = a.emp.Name,
DepartmentName = b == null ? "No Department" : b.Name
});
foreach (var v in result)
{
Console.WriteLine(" " + v.EmployeeName + "\t" + v.DepartmentName);
}
}
}
public class Department
{
public int ID { get; set; }
public string Name { get; set; }
public static List<Department> GetAllDepartments()
{
return new List<Department>()
{
new Department { ID = 1, Name = "IT" },
new Department { ID = 2, Name = "HR" }
};
}
}
public class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public int DepartmentID { get; set; }
public static List<Employee> GetAllEmployees()
{
return new List<Employee>()
{
new Employee { ID = 1, Name = "Mark", DepartmentID = 1 },
new Employee { ID = 2, Name = "Steve", DepartmentID = 2 },
new Employee { ID = 3, Name = "Ben", DepartmentID = 1 },
new Employee { ID = 4, Name = "Philip", DepartmentID = 1 },
new Employee { ID = 5, Name = "Mary" } // कोई डिपार्टमेंट नहीं
};
}
}
व्याख्या
GroupJoin- बाएं कलेक्शन (Employee) को दाएं कलेक्शन (Department) के साथ ग्रुप करता हैDefaultIfEmpty()- जब कोई मैच न मिले तो डिफ़ॉल्ट मान (null) प्रदान करता हैSelectMany- परिणाम को फ्लैट करता है और अंतिम ऑब्जेक्ट बनाता है
आउटपुट
Mark IT
Steve HR
Ben IT
Philip IT
Mary No Department