从嵌入列表中删除项目使用LINQ

本文关键字:object 使用 LINQ 删除项目 列表 | 更新日期: 2023-09-27 17:53:30

总之,我有如下的类结构

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");

但是,对于上面的类,我如何从基础对象Foo中删除称为badConListList<Con> ?显式地,类层次结构像

那样填充
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 */ };

如何使用LINQ从每个Barfoo中删除badCons ?

感谢您的宝贵时间。

p。LINQ可能不是最快的方法;一个简单的循环可能是(这就是LINQ将在引擎盖下做的事情)。你对此也有何评论?

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

您仍然可以使用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()

如果两个列表中的一个比另一个大很多,最好选择只循环大列表一次的版本,否则使用对您和您的代码库读者更容易理解的版本。

相关文章: