如果使用 linq 删除其他列表中不存在的项目,则删除列表中的项目

shi*_*455 0 linq linq-to-sql c#-4.0

我有两种不同类型的列表

class A

{

int number;

string name;

}

class B

{

int number;

}

List<A> a1;

List<B> b1;
Run Code Online (Sandbox Code Playgroud)

现在两个列表都已填充,现在我想删除列表 a1 中的项目(编号)(如果列表 b1 中不存在该项目(编号))。尝试了以下方法

a1.removeall(a=>b1.Exists(b1.number!=a1.number);
Run Code Online (Sandbox Code Playgroud)

但结果并不如预期。请帮助我......

Bro*_*ass 5

我想你想要这个:

a1.RemoveAll(a=> !b1.Any(b=> b.number == a.number));
Run Code Online (Sandbox Code Playgroud)

请注意,这是 O(n^2)。更高效的方法是使用HashSet<int>(这对于小列表可能并不重要,但对于较大的列表请注意这一点):

 HashSet<int> bNums = new HashSet<int>(b1.Select(b => b.number));
 a1.RemoveAll(a => !bNums.Contains(a.number));
Run Code Online (Sandbox Code Playgroud)