This is a short post on how to filter items from one list based on items on another list. We will use .NET Linq for writing the query syntax implementing where not in another list scenario.
Problem Introduction
Let’s say we have two lists as below:
List<Post> skipPosts = new List<Post>();
skipPosts.Add(new Post() { ID = 1 });
skipPosts.Add(new Post() { ID = 2 });
skipPosts.Add(new Post() { ID = 5 });
List<Post> posts = new List<Post>();
posts.Add(new Post() { ID = 1 });
posts.Add(new Post() { ID = 2 });
posts.Add(new Post() { ID = 3 });
posts.Add(new Post() { ID = 4 });
posts.Add(new Post() { ID = 5 });
The posts
list is our main list from where we want to filter out the posts that are in skipPosts
list.
Solution With Linq To Compare Two Lists
The simplest solution with Linq:
var result = posts.Where(p => !skipPosts.Any(p2 => p2.ID == p.ID));
This solution is a short and quite effective with smaller data sets.
If you are working with really large datasets then you might have to consider other options as well.