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)
但结果并不如预期。请帮助我......
我想你想要这个:
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)