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

时间:2012-03-19 02:36:46

标签: linq linq-to-sql c#-4.0

我有两种不同类型的列表

class A

{

int number;

string name;

}

class B

{

int number;

}

List<A> a1;

List<B> b1;

现在两个列表都已填充,现在我想删除列表a1中的项目(编号),如果该项目(编号)不存在于列表b1.tried下面的方法

a1.removeall(a=>b1.Exists(b1.number!=a1.number);

但结果并不像预期的那样。请帮帮我......

1 个答案:

答案 0 :(得分:2)

我想你想要这个:

a1.RemoveAll(a=> !b1.Any(b=> b.number == a.number));

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

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