public static void Main()
var table1 = Enumerable.Range(1, 10);
var table2 = Enumerable.Range(1, 10).Where(n => (n & 1) == 0).OfType<int?>();
var table3 = Enumerable.Range(1, 10).OfType<int?>();
var query = from t1 in table1
join t2 in table2 on t1 equals t2 into j
from t2 in j.DefaultIfEmpty()
join t3 in table3 on t2 equals t3 into j2
from t3 in j2.DefaultIfEmpty()