When working with Nullable types, join statement in LINQ need to be handled carefully. When you perform a join over nullable and non-nullable types,
compile time exception is thrown saying that "Type inference failed in the call to join". For example consider following classes.
public class Employee { public int EmployeeId { get; set; } public string EmployeeName { get; set; } }
public class Employee { public int EmployeeId { get; set; } public string EmployeeName { get; set; } }
To fetch data from these let's write code as;
class Test { static void Main() { var employees = new List<Employee> { new Employee { EmployeeId = 1, EmployeeName = "E1", }, new Employee { EmployeeId = 2, EmployeeName = "E2", }, new Employee { EmployeeId = 3, EmployeeName = "E3", }, }; var departments = new List<Department> { new Department { EmployeeId = 2, EmployeeName = "E2", }, new Department { EmployeeId = null, EmployeeName = "D1", }, new Department { EmployeeId = 3, EmployeeName = "E3", }, }; var r = from dept in departments where dept.EmployeeId != null join emp in employees on new { SourceEmployeeID = dept.EmployeeId.Value, SourceEmployeeName = dept.EmployeeName } equals new { SourceEmployeeID = emp.EmployeeId, SourceEmployeeName = emp.EmployeeName } select new { emp, dept, }; foreach (var item in r) { Console.WriteLine("{0}", item.emp.EmployeeId); } } } }
The query highlighted in above code will match the LHS with EmployeeID which is nullable with RHS EmployeeID which is not nullable.