Посмотрите на MinBy
в MoreLINQ - или я считаю, что в Reactive Extensions есть что-то похожее в System.Interactive
:
var cheapestProduct = products.MinBy(p => p.Price);
Если более одного элемента имеет наименьшее значение, будет возвращен самый ранний в последовательности.