 <p>A tricky way to do this is use <code>Aggregate()</code> extension, using a dictionary as accumulator with the <em>key-property</em> values as keys:</p> <pre><code>var customers = new List&lt;Customer&gt;(); var distincts = customers.Aggregate(new Dictionary&lt;int, Customer&gt;(), (d, e) =&gt; { d[e.CustomerId] = e; return d; }, d =&gt; d.Values); </code></pre> <p>And a <em>GroupBy-style</em> solution is using <code>ToLookup()</code>:</p> <pre><code>var distincts = customers.ToLookup(c =&gt; c.CustomerId).Select(g =&gt; g.First()); </code></pre>