I am trying to do a left outer join on three tables. I know there is a way to do it in one variable but I haven’t been able to figure it out. Instead I have performed two separate left outer joins and then did a left out join on those. Here is my code for that:
var outerJoin1 =
(from h in resultHours
join u in results on new {h.PhysicalUnitId, h.MonthNum} equals new {u.PhysicalUnitId, u.MonthNum} into outer
from grouping in outer.DefaultIfEmpty()
select new {timeKey = h, Key = grouping});
var outerJoin2 =
(from h in resultHours
join s in serviceHrsResults on new {h.PhysicalUnitId, h.MonthNum} equals new {s.PhysicalUnitId, s.MonthNum} into outer2
from grouping in outer2.DefaultIfEmpty()
select new {timeKey = h, Key = grouping});
var outerJoin =
(from a in outerJoin1
join b in outerJoin2 on new {a.timeKey.PlantId, a.timeKey.MonthNum} equals new {b.timeKey.PlantId, b.timeKey.MonthNum} into outer
from grouping in outer.DefaultIfEmpty()
select new{timeKey = a, Key = grouping}).Distinct();
I have tried putting the above together in one variable I can’t get it to work. Here is what I have tried:
var outerjoin =
from h in resultHours
join u in results on new {h.PhysicalUnitId, h.MonthNum} equals new {u.PhysicalUnitId, u.MonthNum} into outer
from grouping in outer.DefaultIfEmpty()
from hr in resultHours
join s in serviceHrsResults on new {hr.PhysicalUnitId, hr.MonthNum} equals new {s.PhysicalUnitId, s.MonthNum} into outer2
from grouping in outer2.DefaultIfEmpty()
select new {timeKey = h && timeKey = hr, Key = grouping};
The problem with this is the two groupings conflict. i’m pretty sure I just need a single grouping right before the select but cannot figure out how to use the “grouping in” and include both outer.DefaultIfEmpty() and outer2.DefaultIfEmpty().
I would appreciate it if someone could enlighten me.
You are using duplicate range variable ids – you’ve got 2x
grouping.– Which grouping is it that you want in the result set ?
– What is this line expected to achieve?
timeKey = h && timeKey = hr– how do you want to combine those in the projection ?I would try the query below, but I’ve changed the
selectpart of it as your combined version doesn’t make sense to me.Let me know if it at all works for you as without data it’s not easy to test this, so I can’t be sure that the new version is fine.