Description
Currently outer joins are supported in a convoluted way, via a regular join with DefaultIfEmpty() call:
var res = persons.Join(roles.DefaultIfEmpty(),
person => person.Value.RoleId, role => role.Key,...)
This is not consistent with LINQ to objects, Entity Framework and other things out there, and unexpected for the users.
Instead we should support GroupJoin properly, see https://stackoverflow.com/questions/584820/how-do-you-perform-a-left-outer-join-using-linq-extension-methods