Посмотрите на метод Кроме , который вы используете следующим образом:
var resultingList =
listOfOriginalItems.Except(listOfItemsToLeaveOut, equalityComparer)
Возможно, вы захотите использовать перегрузку, с которой я связан, что позволит вам указать собственный IEqualityComparer. Таким образом, вы можете указать, как элементы соответствуют на основе вашего составного ключа. (Если вы уже переопределили Equals, вам не нужен IEqualityComparer.)
Редактировать: Поскольку кажется, что вы используете два разных типа классов, вот еще один способ, который может быть проще. Предполагая, что List<Person>
называется persons
, а List<Exclusion>
называется exclusions
:
var exclusionKeys =
exclusions.Select(x => x.compositeKey);
var resultingPersons =
persons.Where(x => !exclusionKeys.Contains(x.compositeKey));
Другими словами: выберите из исключений только ключи, затем выберите из лиц все объекты Person, у которых нет ни одного из этих ключей.