using System.Collections.Generic;
public static void Main()
var master = (new []{ 1, 2, 3, 4, 5}).Select(x => new Item {Id = x});
var update = (new []{ 1, 3, 5}).Select(x => new Item {Id = x});
master = master.Intersect(update, new KeyEqualityComparer<Item>(s => s.Id));
foreach (var item in master)
Console.WriteLine(item.Id);
public class KeyEqualityComparer<T> : IEqualityComparer<T>
private readonly Func<T, object> keyExtractor;
public KeyEqualityComparer(Func<T, object> keyExtractor)
this.keyExtractor = keyExtractor;
public bool Equals(T x, T y)
return this.keyExtractor(x).Equals(this.keyExtractor(y));
public int GetHashCode(T obj)
return this.keyExtractor(obj).GetHashCode();