How to find items in one list that are not in another list in C#?


LINQ Except operator comes under Set operators category in LINQ

The Except() method requires two collections and finding those elements which are not present in the second collection

Except for the extension, the method doesn't return the correct result for the collection of complex types.

Example using Except() method

 Live Demo

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($"Values in List1:");
         foreach (var val in animalsList1) {
            Console.WriteLine($"{val}");
         }
         List<string> animalsList2 = new List<string> {
            "tiger", "cat", "deer"
         };
         Console.WriteLine($"Values in List2:");
         foreach (var val in animalsList2) {
            Console.WriteLine($"{val}");
         }
         var animalsList3 = animalsList1.Except(animalsList2);
         Console.WriteLine($"Value in List1 that are not in List2:");
         foreach (var val in animalsList3) {
            Console.WriteLine($"{val}");
         }
         Console.ReadLine();
      }
   }
}

Output

The output of the above code is

Values in List1:
tiger
lion
dog
Values in List2:
tiger
cat
deer
Value in List1 that are not in List2:
lion
dog

Example using Where Clause

 Live Demo

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($"Values in 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($"Values in List2:");
         foreach (var val in fruitsList2) {
            Console.WriteLine($"{val.Name}");
         }
         var fruitsList3 = fruitsList1.Where(f1 => fruitsList2.All(f2 => f2.Name != f1.Name));
         Console.WriteLine($"Values in List1 that are not in List2:");
         foreach (var val in fruitsList3) {
            Console.WriteLine($"{val.Name}");
         }
         Console.ReadLine();
      }
   }
   public class Fruit {
      public string Name { get; set; }
      public string Size { get; set; }
   }
}

Output

The output of the above code is

Values in List1:
Apple
Orange
Values in List2:
Apple
Mango
Values in List1 that are not in List2:
Orange

Updated on: 13-May-2022

11K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements