0

I have two Linq Results (result,result2)

        List<Employee> result= new List<Employee> {
            new Employee { EmpId= 4, Date ='2014-02-26', EmpName= "abc"},
             new Employee { EmpId = 5, Date = '2014-02-26', EmpName=  "abc"},
             new Employee { EmpId = 6, Date ='2014-02-26', EmpName=  "abc"},
             new Employee { EmpId= 7, Date = '2014-02-26', EmpName=  "abc"} };

        // Create a list of students.
        List<Student> result2 = new List<Student> {
            new Student { EmpId= 1, Date ='2014-02-26', StudentId = 9562 },
            new Student { EmpId= 2,Date ='2014-02-26', StudentId = 9870 },
            new Student { EmpId= 4,Date ='2014-02-26', StudentId = 9913 } };

I want The following result, I had tried with various queries but didn't get like that :

new Employee { EmpId= 4, Date ='2014-02-26', EmpName= "abc",StudentId=9913},
             new Employee { EmpId = 5, Date = '2014-02-26', EmpName=  "abc",StudentId=Null},
             new Employee { EmpId = 6, Date ='2014-02-26', EmpName=  "abc",StudentId=Null},
             new Employee { EmpId= 7, Date = '2014-02-26', EmpName=  "abc",StudentId=Null} };

I have implemented the below query, but getting an exception "

(NullReferenceException was caught) Object reference not set to an instance of an object."

 var res = (from r in result
                           join r2 in result2 on new { EmpId= r.EmpId, Date = r.Date.Value.Year } equals new { EmpId= Convert.ToInt32(r2.EmpId), Date = r2.Date.Value.Year } into list
                           from l in list.DefaultIfEmpty()
                           select new
                           {
                               EmpId= r.EmpId,
    Date=r.Date,
    EmpName=r.EmpName,
    StudentId=l.StudentId
    }).ToList();

Please let me know if anyone know.

1 Answers1

1

The problem is here:

StudentId = l.StudentId

Some of your l values are null so NullReferenceException is thrown. You need to check for null values:

var res = (from r in result
           join r2 in result2 
               on new { EmpId= r.EmpId, Date = r.Date.Value.Year } 
               equals new { EmpId= Convert.ToInt32(r2.EmpId), Date = r2.Date.Value.Year } 
               into list           
           from l in list.DefaultIfEmpty()
           select new
           {
               EmpId = r.EmpId,
               Date = r.Date,
               EmpName = r.EmpName,
               StudentId = (l != null) ? l.StudentId : (int?)null
           }).ToList();

(considering LINQ-to-Objects; not sure if such expression is valid in LINQ-to-Entities)

Aleksey Shubin
  • 1,960
  • 2
  • 20
  • 39