如何在一个列表中查找不在C#中的另一个列表中的项目?

LINQ除运算符位于LINQ中的“设置运算符”类别下

Except()方法需要两个集合,并找到第二个集合中不存在的那些元素

除了扩展方法不会为复杂类型的集合返回正确的结果。

使用Except()方法例

using System;
using System.Collections.Generic;
using System.Linq;
namespace DemoApplication {
   class Program {
      static void Main(string[] args) {
         List<string> animalsList1 = new List<string> {
            "tiger", "lion", "dog"
         };
         Console.WriteLine($"List1中的值:");
         foreach (var val in animalsList1) {
            Console.WriteLine($"{val}");
         }
         List<string> animalsList2 = new List<string> {
            "tiger", "cat", "deer"
         };
         Console.WriteLine($"List2中的值:");
         foreach (var val in animalsList1) {
            Console.WriteLine($"{val}");
         }
         var animalsList3 = animalsList1.Except(animalsList2);
         Console.WriteLine($"不在List2中的List1中的值:");
         foreach (var val in animalsList3) {
            Console.WriteLine($"{val}");
         }
         Console.ReadLine();
      }
   }
}

输出结果

上面代码的输出是

List1中的值:
tiger
lion
dog
List2中的值:
tiger
lion
dog
不在List2中的List1中的值:
lion
dog

使用Where子句的示例

using System;
using System.Collections.Generic;
using System.Linq;
namespace DemoApplication {
   class Program {
      static void Main(string[] args) {
         List<Fruit> fruitsList1 = new List<Fruit> {
            new Fruit {
               Name = "Apple",
               Size = "Small"
            },
            new Fruit {
               Name = "Orange",
               Size = "Small"
            }
         };
         Console.WriteLine($"List1中的值:");
         foreach (var val in fruitsList1) {
            Console.WriteLine($"{val.Name}");
         }
         List<Fruit> fruitsList2 = new List<Fruit> {
            new Fruit {
               Name = "Apple",
               Size = "Small"
            },
            new Fruit {
               Name = "Mango",
               Size = "Small"
            }
         };
         Console.WriteLine($"List2中的值:");
         foreach (var val in fruitsList2) {
            Console.WriteLine($"{val.Name}");
         }
         var fruitsList3 = fruitsList1.Where(f1 => fruitsList2.All(f2 => f2.Name != f1.Name));
         Console.WriteLine($"List1中没有的值在List1中:");
         foreach (var val in fruitsList3) {
            Console.WriteLine($"{val.Name}");
         }
         Console.ReadLine();
      }
   }
   public class Fruit {
      public string Name { get; set; }
      public string Size { get; set; }
   }
}

输出结果

上面代码的输出是

List1中的值:
Apple
Orange
List2中的值:
Apple
Mango
List1中没有的值在List1中:
Orange