Как насчет этой реализации для одного слоя?
observableCollection.Where(l => l.type == invalid).ToList().All(i => observableCollection.Remove(i))
- Изменить -
К сожалению, вам нужен ToList () в середине, чтобы заставить первая половина для оценки, поскольку LINQ делает ленивую оценку по умолчанию.