是FirstOrDefault/First和OrderByDescending,比LastOrDefault/Last和

本文关键字:LastOrDefault Last OrderByDescending First FirstOrDefault | 更新日期: 2023-09-27 17:59:16

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

通常,如果我想找到一个按特定字段排序的记录,比如"最新添加的人",我会写这样的东西:

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

最近,我从团队中的另一位Dev那里获得了一些工作,他更喜欢写:

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

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

我的想法是,第一个会更快,因为在返回对象时不需要"尽可能"迭代集合,但这更像是一种预感!

是FirstOrDefault/First和OrderByDescending,比LastOrDefault/Last和

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

(请注意,只对最上面的项目进行整体排序要比使用Last而不是First效率低得多;请考虑实现MoreLINQ的MaxBy函数,以便在O(n)而非O(n log n)中获得您想要的项目。)

如果您正在将LINQ用于其他东西(SQL、实体),那么它可能根本没有什么区别。

*总体而言;正如RB指出的那样,如果数据已经在某种程度上被排序,则情况可能并非如此。