Как выполнить функцию «поиск наилучшего результата» в LINQ?

Приветствую!

Я ищу способ поиска в коллекции объекта, который лучше всего удовлетворяет мои требования. критерии. Поскольку мне приходится делать это довольно часто, Я искал, как выполнить запрос с помощью LINQ, но не смог найти простой способ сделать это, который бы не «казался» тратой времени.

Функциональной реализацией будет:

collection.OrderByDescending (f = > FitFunction (f)). First ()

Но, похоже, это излишне выполняет сортировку. Мне действительно просто нужно линейное сканирование. Функция Min LINQ возвращает наилучшее соответствие, а не объект, который дает наилучшее соответствие, и поэтому не кажется полезным.

Для ясности, код не-LINQ, который я обычно писал (и делал это так много раз ):

T best;
float bestFit = something very low;

foreach (T ob in collection)
{
  float fit = FitFunction(ob);
  if (fit > bestFit)
  {
    bestFit = fit;
    best = ob;
  }
}
return best;

И я думаю, что могу просто создать свой собственный метод расширения для этого; но мне кажется, что в LINQ уже должен быть способ сделать это.

Спасибо!

7
задан bdukes 12 November 2010 в 20:39
поделиться