 <p>Your current approach is very inefficient - it's O(N * M) <em>and</em> it creates a list on each iteration.</p> <p>Using a join would be more efficient - I would still use a <code>foreach</code> loop, but separate the querying part from the update part:</p> <pre><code>var pairsToUpdate = from original in vmlist join item in vlist on new { original.SId, original.ParameterId, original.WId } equals new { item.SId, item.ParameterId, item.WId } select new { original, item }; foreach (var pair in pairsToUpdate) { pair.original.Value = pair.item.Value; } </code></pre> <ul> <li>No abuse of <code>Select</code> with side-effects</li> <li>No extra lists created for no good reason</li> <li>More efficient selection of items to update</li> </ul>