Это не полный ответ для вас, но в левой части соединения вы можете использовать оператор DefaultIfEmpty, например:
var collection =
from u in db.Universe
join history in db.History on u.id = history.id into temp
from h in temp.DefaultIfEmpty()
where h.dateCol < DateTime.Now.Date.AddDays(-1)
select u.id, u.name, h.dateCol ?? '1900-01-01'
У меня еще не было необходимости выполнять какие-либо групповые команды, поэтому я пропустил это, чтобы не отправлять вас по неверному пути. Еще две быстрые вещи, на которые стоит обратить внимание. Я не смог на самом деле присоединиться по двум параметрам, хотя, как указано выше, есть способы обойти это. Так же ?? Оператор действительно хорошо работает вместо SQL в SQL.