You must use the into and DefaultIfEmpty to get null elements:
var result = (from myReference in context.MyReference join u1 in context.USER on myReference.User1 equals u1.Id join u2 in context.USER on myReference.User2 equals u2.Id into x2 from un2 in x2.DefaultIfEmpty() select new MyClassResult { Id = myReference.Id, U1FirstName = u1.FirstName, U2FirstName = un2 != null ? un2.FirstName : null });
Alternatively, especially if myReference.User1 can be 0 too, you can use the let keyword to get user information before final selection:
var result = (from myReference in context.MyReference let u1 = users.FirstOrDefault(u => u.Id == myReference.User1) let u2 = users.FirstOrDefault(u => u.Id == myReference.User2) select new MyClassResult { Id = myReference.Id, U1FirstName = u1 != null ? u1.FirstName : null, U2FirstName = u2 != null ? u2.FirstName : null });
source share