 <p>If you want to copy the item from index 0 in the first list to index 0 in the second, and so on for all of the other indexes you can do this:</p> <pre><code>var pairs = members.Zip(divisions, (a, b) =&gt; new { Member = a, Division = b, }); foreach (var pair in pairs) { Copy(pair.Member, pair.Division); } </code></pre> <p>If the indexes don't match you need to do a join:</p> <pre><code>var pairs = members.Join(divisions , member =&gt; member.DivisionId , division =&gt; division.DivisionId , (a, b) =&gt; new { Member = a, Division = b, }); foreach (var pair in pairs) { Copy(pair.Member, pair.Division); } </code></pre> <p>Note that the <code>Zip</code> will be faster, if the items are already in the proper order. Join will be slower than the Zip, but will be faster than manually re-ordering the items to allow a <code>Zip</code>.</p>