无论如何要从基于.Where()linq子句(.RemoveWhere()?)的集合中删除

时间:2011-11-07 18:01:20

标签: c# linq collections

我看到一个集合有一个.Remove()和一个.RemoveAt()方法。我想做这样的事情:

  myObject.ChildList.RemoveWhere(r=>r.Name == "Joe");

实现这一目标的最佳方法是什么,除了单独执行,然后循环遍历每个项目并调用它们.Remove()

3 个答案:

答案 0 :(得分:14)

List<T>RemoveAll方法接受谓词。

myObject.ChildList.RemoveAll(r => r.Name == "Joe");

答案 1 :(得分:2)

您可以将RemoveWhere()写为扩展方法。但是更改集合很棘手,有时效率很低。

为什么不创建新的收藏?

myObject.ChildList = myObject.ChildList.Except(
      myObject.ChildList.Where(r=>r.Name == "Joe"));

答案 2 :(得分:0)

根据你需要条件的程度,你可以调用Where()但是反转你在RemoveWhere()中完成的所有逻辑。这可能会有点复杂,并且几乎可以肯定比RemoveWhere()类型函数效率低一些,但是如果你想做一些简单而懒惰的事情,那就可以了。