如何在LINQ中执行“搜索最佳”功能?

时间:2010-11-12 20:36:35

标签: c# 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中做到这一点。

谢谢!

1 个答案:

答案 0 :(得分:7)

这实际上是一个基于谓词的Top-N问题,其中附加约束条件N总是等于1. 不幸的是,没有内置的LINQ运算符执行TopN()操作......但正如你所指出的那样,自己写一个并不太难。

MoreLINQ库有MaxBy()运算符的实现,它允许您指定谓词 - 并且也可以工作。