Вы можете использовать Enumerable. Кроме этого
List<Employee> a;
List<Employee> b;
var finalCountries = a.Except(b).ToList();
Если вам нужно сравнить ваших сотрудников по каким-то полям, и это не реализовано сотрудником, вы можете использовать пользовательский компаратор. Например это . Когда ваш код может выглядеть так:
var comparer = new LambdaComparer<Employee>((emp1,emp2)=>emp1.ISOA2 == emp2.ISOA2);
var finalCountries = a.Except(b,comparer).ToList();
LambdaComparer код для удобства:
class LambdaComparer<T> : IEqualityComparer<T>
{
readonly Func<T, T, bool> _lambdaComparer;
readonly Func<T, int> _lambdaHash;
public LambdaComparer(Func<T, T, bool> lambdaComparer) :
this(lambdaComparer, o => 0){}
public LambdaComparer(Func<T, T, bool> lambdaComparer, Func<T, int> lambdaHash)
{
_lambdaComparer = lambdaComparer ?? throw new ArgumentNullException(nameof(lambdaComparer));
_lambdaHash = lambdaHash ?? throw new ArgumentNullException(nameof(lambdaHash));
}
public bool Equals(T x, T y) => _lambdaComparer(x, y);
public int GetHashCode(T obj) => _lambdaHash(obj);
}
Обновление:
Чтобы сделать ваш метод универсальным, вы можете реализовать IEquatable интерфейс в каждом из ваших типов сущностей и использовать перегрузку Except без параметров.