 <p>Assuming one has an extension method <code>IEnumerable.MinBy</code>:</p> <pre><code>var r = new Random(); return source.MinBy(x=&gt;r.Next()) </code></pre> <p>The method <code>MinBy</code> doesn't save the sequence to memory, it works like <code>IEnumerable.Min</code> making one iteration (see <a href="http://code.google.com/p/morelinq/source/browse/MoreLinq/MinBy.cs" rel="nofollow">MoreLinq</a> or <a href="http://stackoverflow.com/a/11326714/284795">elsewhere</a> )</p>