哪种LINQ查询更快?排序或选择最后一个?

时间:2018-08-01 14:48:33

标签: performance linq

我正在编写LINQ查询,必须在列表中选择最后一个结果。

哪个更有效率?

.OrderByDescending(x => x.Id).First();

.Last();

1 个答案:

答案 0 :(得分:1)

都不能说效率更高。他们做不同的事情。

.Last();

该元素返回序列的最后一个元素(如果有),而无需排序

.OrderByDescending(x => x.Id).First();

如果有一个元素,则该元素将返回升序排列的最后一个元素。它将得到与以下结果相同的结果:

.OrderBy(x => x.Id).Last();


var sequence = {4, 1, 3}
var a = sequence.Last();                        // result: 3
var b = sequence.OrderByDescending(x => x.Id)   // intermediate result: 4, 3, 1
                .First();                       // final result: 4
var c = sequence.OrderBy(x => x.Id)             // intermediate result: 1, 3, 4
                .Last();                        // final result: 4

b比c更有效率,因为排序后,枚举器只需将MoveNext移到第一个元素,而对于c,枚举器必须将MoveNext()移到不再有元素。