Вы можете использовать встроенный Linq .Except (), но он хочет IEqualityComparer, поэтому вместо него используйте плавную версию .Except ().
Предполагается, что объект с целочисленной клавишей, как вы указали:
public class Item
{
public int Key { get; set; }
public int Value { get; set; }
public override string ToString()
{
return String.Format("{{{0}:{1}}}", Key, Value);
}
}
Исходный список объектов можно объединить с измененным следующим образом:
IEnumerable<Item> original = new[] { 1, 2, 3, 4, 5 }.Select(x => new Item
{
Key = x,
Value = x
});
IEnumerable<Item> changed = new[] { 2, 3, 5 }.Select(x => new Item
{
Key = x,
Value = x * x
});
IEnumerable<Item> result = original.Except(changed, x => x.Key).Concat(changed);
result.ForEach(Console.WriteLine);
выход:
{1:1}
{4:4}
{2:4}
{3:9}
{5:25}