如何在两种不同类型上使用 except?

问题描述 投票:0回答:2

我可以在两种相同类型上使用

Except()
,例如:

var list1 = new List<int> { 1 , 2 , 3 , 5 , 9 };
var list2 = new List<int> { 4 , 3 , 9 };

var expectedList = list1.Except(list2);//Result:  { 1 , 2 , 5 }

但是不同类型怎么办?喜欢:

var cats = new List<Cat>();
var dogs = new List<Dog>();

var exceptCats = cats
             .Except(dogs)
             .On(cat.Age == dog.Age && cat.Name == dogs.Name)
c# linq except
2个回答
0
投票

使用

Except()
排除第一组和第二组,两者都是 same 类型。

在这种情况下,您可以使用

.Where()
进行过滤,它具有相同的行为。

var exceptCats = cats.Where(cat => !dogs.Any(dog => cat.Age == dog.Age && cat.Name == dog.Name))
    .ToList();

0
投票

让我们重新表述一下:您希望所有不存在狗的猫具有相同的名字和年龄。

通过这样的表述,您需要使用的 Linq 几乎自然而然地出现了:

var cats = new List<Cat>();
var dogs = new List<Dog>();

var exceptCats = cats.Where(!dogs.Any(dog => cat.Age == dog.Age && cat.Name == dog.Name));
© www.soinside.com 2019 - 2024. All rights reserved.