这是一个使用UNION而不是LEFT OUTER的替代答案,它确切地返回了您正在寻找的结果集(我认为我的第一个答案不太符合您的“独特”要求):
var a = from m in month
join h in holiday on m.Id equals h.MonthId
select new
{
MonthId = m.Id,
Month = m.Name,
Holiday = h.Name,
HolidayDay = h.DayOfMonth,
Appointment = "",
AppointmentDay = 0
};
var b = from m in month
join p in appointments on m.Id equals p.MonthId
select new
{
MonthId = m.Id,
Month = m.Name,
Holiday = "",
HolidayDay = 0,
Appointment = p.Description,
AppointmentDay = p.DayOfMonth
};
var events = from o in a.Union(b)
orderby o.MonthId, o.HolidayDay + o.AppointmentDay
select o;