如何使用SelectMany修改原始集合

时间:2017-08-28 12:23:50

标签: c#

SelectMany似乎创建了该集合的副本。我正在寻找一种方法来从展平的集合中删除项目并保持更改。

示例:

var removed = FooItems
.SelectMany(x => x.Children)
.ToList()
.RemoveAll(y => y.ID == "1");

以上所有内容都为已删除的项目返回1,但似乎已将其从集合的副本中删除,并且原始文件未被修改。

任何提示请告知。

1 个答案:

答案 0 :(得分:2)

假设ChildrenList<T>,那么您可以循环FooItems并从每个Children列表中删除。

foreach(var foo in FooItems)
    foo.Children.RemoveAll(y => y.ID == "1");

如果Children不是List<T>而是IEnumerable,那么您必须执行其他操作,例如

foreach(var foo in FooItems)
    foo.Children = foo.Children.Where(y => y.ID != "1").ToList();