我可以在两种相同类型上使用
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)
Except()
排除第一组和第二组,两者都是 same 类型。
在这种情况下,您可以使用
.Where()
进行过滤,它具有相同的行为。
var exceptCats = cats.Where(cat => !dogs.Any(dog => cat.Age == dog.Age && cat.Name == dog.Name))
.ToList();
让我们重新表述一下:您希望所有不存在狗的猫具有相同的名字和年龄。
通过这样的表述,您需要使用的 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));