LINQ 2 Objects Having子句

时间:2011-04-20 11:24:12

标签: linq-to-objects

给定MyType {int Index,string Name}的集合,获取Min / Max索引项的技术有效方法是什么?

我们使用:

MyType minIndexItem = items.Single(t=>
   t.Index == items.Min(t=>
      t.Index));

看起来不太优雅。我们也希望坚持使用lambda语法,我们正在寻找技术上最有效的方法,而不是扩展方法等等。

感谢。

2 个答案:

答案 0 :(得分:0)

可能是

  (from item in items select item order by item.Index).First() 

如果Index字段有db索引,那就快了。

答案 1 :(得分:0)

对它进行排序将是LINQ-to-RDBMS的简单方法,但可能不适用于LINQ-to-Objects,因为排序可能很昂贵并且在O(nlogn)中运行。

您可以使用LINQ聚合来获得最低或最高。这恰好贯穿整个集合一次,总是O(n)。例如,要获得最低项目:

items.Aggregate((current, next) => next.Index < current.Index ? next : current);