Вы сможете присоединиться к ним по их ключам и выбрать оба значения. Затем вы можете фильтровать на основе того, являются ли значения одинаковыми или разными. Наконец, вы можете преобразовать коллекцию в словарь с ключами и вторыми значениями.
var compared = first.Join( second, f => f.Key, s => s.Key, (f,s) => new { f.Key, FirstValue = f.Value, SecondValue = s.Value } )
.Where( j => j.FirstValue != j.SecondValue )
.ToDictionary( j => j.Key, j => j.SecondValue );
Использование цикла не должно быть слишком плохим. Я подозреваю, что они будут иметь аналогичные характеристики производительности.
var compared = new Dictionary<string,object>();
foreach (var kv in first)
{
object secondValue;
if (second.TryGetValue( kv.Key, out secondValue ))
{
if (!object.Equals( kv.Value, secondValue ))
{
compared.Add( kv.Key, secondValue );
}
}
}