 <p>So basically you just want to remove all from the first list which appear in the second list and performance is important?</p> <p>I like <a href="http://stackoverflow.com/a/32013973/284240">Georges approach</a> most, it is the most efficient if the list is getting large. But <code>List.RemoveAll</code> is also more efficient:</p> <pre><code>dataList.RemoveAll(d =&gt; filterList.Any(x =&gt; x.ID == d.DataID)); </code></pre>