Я считаю, что эта проблема не имеет никакого отношения к IESI ISet , реализующему IEnumerable (он делает , кстати), но вместо этого на ответ указывает исключение приведения, упомянутое в ' обновить "к исходному сообщению.
Линия ...
customer.Contacts = customer.Contacts.Where(x => x.Id != contactId);
... фактически (неправильно) пытается присвоить IEnumerable (результат оператора .Where (...)) свойству типа ISet (свойство .Contacts в Класс клиента).
Я сильно подозреваю, что с этой строкой все будет в порядке ...
IEnumerable<Contact> contacts = customer.Contacts.Where(x => x.Id != contactId);
... демонстрирует, что оператор .Where (...) прекрасно работает на IESI ISet , но что .Where (...) возвращает (конечно) IEnumerable .
Чтобы это работало, вам нужно преобразовать результат вашей операции .Where (...) из IEnumerable в ISet , прежде чем пытаться присвоить его свойству customer.Contacts.