 <p>this is probably the simplest way to do it, <em>using a loop</em>:</p> <pre><code>//counting backwards is easier when you are doing removals from a list for( int i = lst.Count -1; i&gt;= 0; i--) { if(condition1 || condition2) { RemoveFromDB(lst[i]); lst.RemoveAt(i); } } </code></pre> <p>you can refactor that to use the functional methods provided by the framework:</p> <pre><code>var toRemove = lst.FindAll( item =&gt; !PricingOptionIsValid(item) || !item.ItemIsOnSite() ); toRemove.ForEach( item =&gt; { RemoveFromDB(item.ID); lst.Remove(item); }); </code></pre> <p>and you could write this without the toRemove variable, by chaining the ForEach onto the FindAll</p>