我的问题类似于this one,但与EntityCollection<>
相关。
EntityCollection
实施Remove()
,允许您一次从列表中删除单个项。不过,我想实现一次可以删除多个项目的扩展方法,类似于IList<T>
的{{1}}方法。
一个想法是遍历列表,并删除项目。类似的东西:
RemoveAll(Predicate<T> match)
但是,这会引发异常,因为您无法修改正在迭代的集合。
另一个想法是构建要删除的项目的临时列表,然后循环遍历 列表并从集合中删除每个项目。但是,这对我来说似乎效率低下。有更好的实施吗?
答案 0 :(得分:7)
正如我在评论中所说,迭代二级列表可能是这里唯一安全的选择。
您可以使用以下内容实现它:
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));
}