Hint : Use the DefaultIfEmpty() extension and the into contextual keyword
The trick is to store the result of the join into a collection and the select from the outer collection and the into
Notice that the only thing that makes it a left outer join is the use of into orders and then from using the orders.DefaultOrEmpty.
Ofcourse a right outer join is a left outer join with the collection orders swapped.
Mentioned in this book : Programming Microsoft LINQ in Microsoft .NET Framework 4
Also this is a good explanation : http://smehrozalam.wordpress.com/2009/06/10/c-left-outer-joins-with-linq/