What's the C# equivalence of Python's min/max
<p>What's C#'s equivalence of the following Python's min/max code:</p>

<pre><code>pairs = [ (2,"dog"), (1, "cat"), (3, "dragon"), (1, "tiger") ]

# Returns the PAIR (not the number) that minimizes on pair[0]
min_pair = min(pairs, key=lambda pair:pair[0])

# this will return (1, 'cat'), NOT 1
</code></pre>

<p>It seems that C#'s Enumerable.Min is very close. But according to <a href="http://msdn.microsoft.com/en-us/library/bb548741" rel="nofollow">its MSDN doc</a>, it always returns the minimizing VALUE (not the original object). Am I missing anything?</p>

<p><strong>EDIT</strong></p>

<hr>

<p><strong>Please note</strong> - I'm not inclined to achieve this by sorting first, since sorting (O(nlogn)) is computationally heavier than finding the minimum (O(n)).</p>

<p><strong>Please also note</strong> - Dictionary is not a desired approach either. It cannot handle cases where there are duplicate keys - (1, "cat") and (1, "tiger"). </p>

<p>More importantly, dictionary cannot handle cases where the items to be processed is a complex class. E.g., finding minimum over a list of animal objects, using age as the key:</p>

<pre><code>class Animal
{
  public string name;
  public int age;
}
</code></pre>
