按属性从递归列表中删除项目

时间:2019-03-15 07:38:15

标签: c# list linq

我有这样的数据结构

public class DomainObject
{
    public List<DomainObject> Children { get; private set; }
    public List<Car> Cars { get; private set; }
}

public class Car 
{
    public bool Sold { get; }
}

因此我的结构相当嵌套,我想删除所有未标记为Car的{​​{1}}。

这是我真正想要的一个例子

Sold

成为

List
  DomainObject
    Children
      Car A (Sold)
      Car B (!Sold)
      Car C (Sold)
    Children
      Car D (!Sold)
      Car E (!Sold)
      Car F (Sold)

2 个答案:

答案 0 :(得分:2)

应该使用递归函数。

public void RemoveNonSoldCars(DomainObject parent)
{
    parent.Cars.RemoveAll(x => !x.Sold);
    foreach (var item in parent.Children)
        RemoveNonSoldCars(item);
}

答案 1 :(得分:1)

创建一个使用DomainObject的方法,然后从其Cars变量中删除所有未售出的汽车。可以通过反向for循环或将RemoveAlllinq一起使用来完成。通过对其中的所有子对象进行调用来结束该方法。