Обычный способ сделать это, если отсутствует «RemoveAll (предикат)», это сохранить список удалений (здесь обобщенный для любого типа):
var remove = new List<SomeType>();
foreach(var row in source) {
if(condition) remove.Add(row);
}
foreach(var obj in remove) {
source.Remove(obj);
}
Однако, если доступно, то:
source.RemoveAll(row => condition);
подход проще.