Is it possible to implement RemoveAll() on EntityCollection<T>?
.net, c#, entity-framework, linq
Solution
As I said in comments, iterating over a secondary list is probably the only safe choice here.
You can implement it with something like:
public static void RemoveAll<T>(this EntityCollection<T> collection,
Predicate<T> match) where T : EntityObject
{
if (match == null) {
throw new ArgumentNullException("match");
}
collection.Where(entity => match(entity))
.ToList().ForEach(entity => collection.Remove(entity));
}
Problem
I have a question similar to this one, but pertaining to `EntityCollection<>`. `EntityCollection` implements `Remove()`, allowing you to remove a single item from the list at once. However, I'd like to implement an extension method that can remove multiple items at once, similar to `IList<T>`'s `RemoveAll(Predicate<T> match)` method. One idea would be to loop through the list, and remove items. Something like: ``` public static void RemoveAll<T>(this EntityCollection<T> collection, Predicate<T> match) where T : EntityObject { foreach (T o in collection) { if (match(o)) collection.Remove(o); } } ``` However, this will throw an exception because you can't modify the collection you're iterating through. Another idea would be to build a temporary list of items to remove, then loop through that list and remove each item from the collection. However, this seems inefficient to me. Is there a better implementation?