using System.Collections.Generic;
public static void Main()
Dictionary<string, string> first = new Dictionary<string, string>();
Dictionary<string, string> second = new Dictionary<string, string>();
first.Add("NAME", "NAME");
first.Add("TYPE", "TYPE");
first.Add("NUMBER", "NUMBER");
first.Add("DATE", "DATE");
first.Add("SOURCE", "SOURCE");
second.Add("TYPE", "T1");
second.Add("REF", "A1234");
second.Add("NUMBER", "B456");
second.Add("DATE", "D123455");
second.Add("NAME", "NAME");
second.Add("SOURCE", "SOURCE");
var result = first.Union(second).GroupBy(x => x.Key).Select(x => new { Key = x.Key, Value = x.Last().Value }).ToDictionary(x => x.Key, x => x.Value);
foreach(var item in result)
Console.WriteLine(item.Key + ": " + item.Value);