Mik*_*sen 4 .net c# linq entity-framework
我有一个与此类似的问题,但与之相关EntityCollection<>.
EntityCollection实现Remove(),允许您一次从列表中删除单个项目.不过,我想实现的扩展方法,可以消除在一次多个项目,类似IList<T>的RemoveAll(Predicate<T> match)方法.
一个想法是循环遍历列表,并删除项目.就像是:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这将抛出异常,因为您无法修改正在迭代的集合.
另一个想法是构建要删除的项目的临时列表,然后遍历该列表并从集合中删除每个项目.但是,这对我来说似乎效率低下.有更好的实施吗?
正如我在评论中所说,迭代二级列表可能是这里唯一安全的选择.
您可以使用以下内容实现它:
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));
}
Run Code Online (Sandbox Code Playgroud)