Linq查询我的List <square>以查看一个列表中的项是否在另一个列表中

时间:2016-04-10 14:10:55

标签: c# linq

我尝试过相关问题的多行代码,但它们似乎对我没用。

我有两个List<Square> s:

List<Square> List1 = new List<Square> { sq1, sq2, sq3 };
List<Square> List2 = new List<Square> { sq1, sq5, sq7 };

我想删除List2中已List1的所有方格。我试过这段代码:

var test2NotInTest1 = List1.Where(l1 => !List2.Any(l2 => l1.Contains(List2)));

来自相关问题,但根本没有用。我仍然是这个新手,所以我可能只是输错了。我希望你能帮助我!

3 个答案:

答案 0 :(得分:3)

这不适合你吗?

var test2NotInTest1 = List2.Except(List1);

如果Squareclass(不是struct)并且列表元素指向相同的变量,那么这应该有效。否则,您需要在Square类/结构上实施IEquatable(或者至少提供正确的GetHashCodeEquals函数)。

答案 1 :(得分:2)

使用RemoveAll方法。

List2.RemoveAll(x=>List1.Contains(x));

或者,如果您想删除尺寸相同的方块,可以使用以下

List2.RemoveAll(x => List1.Any (y=> x.x == y.x && x.y == y.y && x.width == y.width && x.height == y.height));

答案 2 :(得分:1)

这是原始代码的工作方式:

var test2NotInTest1 = List2.Where(l1 => !List1.Contains(l1));

这里只有Square似乎是一个类,List.Contains需要IEqualityComparer<Square>的实现,在内部调用它来比较Square对象,检查这个{{ 3}}