15

我有一个 LINQ 问题,我想知道是否有人知道答案。

通常,如果我想查找按特定字段排序的记录,例如“最新添加的人”,我会写如下内容:

MyCollection.OrderByDescending(x => x.AddedDate).FirstOrDefault();

最近我从团队中另一个喜欢写作的 Dev 那里得到了一些工作:

MyCollection.OrderBy(x => x.AddedDate).LastOrDefault();

所以我的问题是,降序排序并选择第一个,比排序另一个方向并选择最后一个更快还是更慢?

我的想法是,首先会更快,因为它不需要在返回对象时“尽可能”地迭代集合,但这比其他任何事情都更加预感!

4

1 回答 1

14

如果您使用的是 LINQ-to-Objects,第一个会稍微快一些。这两种都将花费相同的时间*,但您认为这FirstOrDefaultLastOrDefault. 但是,与排序所需的时间相比,差异可以忽略不计。

(请注意,进行整体排序以仅获取顶部项目比使用Lastover效率低得多First;考虑实现类似 MoreLINQ 的MaxBy函数来获取您想要的项目O(n),而不是O(n log n)时间。)

如果您使用 LINQ 到其他东西(SQL、实体),它可能根本没有区别。

* 一般来说; 正如 RB 指出的那样,如果数据已经在某种程度上进行了排序,则情况可能并非如此。

于 2013-02-15T09:29:15.380 回答