Три варианта. Один без изменений:
var excludeIds = new HashSet<int>(excludeList.Select(x => x.Id));
var targetList = firstList.Where(x => !excludeIds.Contains(x.Id)).ToList();
Также можно переопределить Equals
и GetHashCode
и использовать:
var targetList = firstList.Except(excludeList).ToList();
Или напишите IEqualityComparer<MyType>
, который сравнивается по идентификаторам, и используйте:
var targetList = firstList.Except(excludeList, comparer).ToList();
Второй и третий варианты, безусловно, лучше IMO, особенно если вам нужно выполнять такую работу в разных местах.