using System.Collections.Generic;
public static void Main()
Dictionary<string, string> dic1 = new Dictionary<string, string>
Dictionary<string, string> dic2 = new Dictionary<string, string>
var query = (from d1 in dic1
join d2 in dic2 on d1.Key equals d2.Key into dic21
from d3 in dic21.DefaultIfEmpty()
select new {d1.Key, d1.Value, Val2 = d3.Value})
join d1 in dic1 on d2.Key equals d1.Key into dic21
from d3 in dic21.DefaultIfEmpty()
select new {d2.Key, d3.Value, Val2 = d2.Value});
Console.WriteLine($"{q.Key} {q.Value} {q.Val2}");