使用LINQ </object>从嵌入列表<object>中删除项目

时间:2013-01-16 12:28:25

标签: c# linq class

全部,我有以下类结构

public class Foo : IComparable<Foo> 
{
    public List<Bar> Bars;
}

public class Bar : IComparable<Bar> 
{
    public List<Con> Cons;
}

public class Con : IComparable<Con>
{
    ...
}

我知道如何从列表中删除对象

authorsList.RemoveAll(x => x.FirstName == "Bob");

但是,对于上面的课程,如何从我的基础对象List<Con>中删除名为badConList的{​​{1}}?显式地,类层次结构填充为

Foo

如何使用LINQ从Foo foo = new Foo(); foo.Bars = new List<Bar>() { /* Some Bar list */ }; foreach (Bar bar in foo.Bars) bar.Cons = new List<Con>() { /* Some Con list */ }; // Now a bad Con list. List<Con> badCons = new List() { /* Some bad Con list */ }; 中移除badCons

感谢您的时间。

聚苯乙烯。 LINQ可能不是这里最快的方法;一个简单的循环可能是(无论如何LINQ将在引擎盖下做什么)。你也可以对此发表评论吗?

1 个答案:

答案 0 :(得分:3)

您仍然可以使用RemoveAll

bar.Cons.RemoveAll(x => badCons.Contains(x));

另一种解决方案是使用循环:

foreach(var badCon in badCons)
    bar.Cons.Remove(badCon);

两个版本多次循环其中一个列表:

  1. 第一个版本循环badCons N次,N为bar.Cons.Count()
  2. 第二个版本循环bar.Cons N次,N为badCons.Count()
  3. 如果两个列表中的一个比另一个大,那么选择只循环大型列表一次的版本是个好主意,否则请使用更易于理解的版本和代码库的读者