 <p>The reason .NET could not "just" sort your <code>Customer</code> objects is because it has no way of guessing in what way you want to sort them: by salary, by first name, by last name, by the time they placed their first order, etc.</p> <p>However, you can make it work without implementing <code>IComparable</code> in three different ways:</p> <ul> <li><strong><a href="https://msdn.microsoft.com/en-us/library/234b841s%28v=vs.110%29.aspx?f=255&amp;MSPPError=-2147217396" rel="nofollow">Pass a separate <code>IComparer&lt;Customer&gt;</code></a> implementation</strong> - this lets you move comparison logic to a separate class, and apply different comparison logics based on a situation.</li> <li><strong><a href="https://msdn.microsoft.com/en-us/library/w56d4y5z(v=vs.110).aspx" rel="nofollow">Pass a <code>Comparison&lt;Customer&gt;</code></a> delegate</strong> - same as above, but now you don't need a separate class; this lets you provide comparison logic in a lambda.</li> <li><strong>Use LINQ's <a href="https://msdn.microsoft.com/library/bb534966%28v=vs.100%29.aspx?f=255&amp;MSPPError=-2147217396" rel="nofollow"><code>OrderBy</code></a> instead</strong> - Similar to above, but gives you additional capabilities (filtering, projecting, grouping, etc.)</li> </ul>