是否可以在EntityCollection <t>上实现RemoveAll()?</t>

时间:2013-02-22 18:44:06

标签: c# .net linq entity-framework

我的问题类似于this one,但与EntityCollection<>相关。

EntityCollection实施Remove(),允许您一次从列表中删除单个项。不过,我想实现一次可以删除多个项目的扩展方法,类似于IList<T>的{​​{1}}方法。

一个想法是遍历列表,并删除项目。类似的东西:

RemoveAll(Predicate<T> match)

但是,这会引发异常,因为您无法修改正在迭代的集合。

另一个想法是构建要删除的项目的临时列表,然后循环遍历 列表并从集合中删除每个项目。但是,这对我来说似乎效率低下。有更好的实施吗?

1 个答案:

答案 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));
}