我正在编写LINQ查询,必须在列表中选择最后一个结果。
哪个更有效率?
.OrderByDescending(x => x.Id).First();
或
.Last();
答案 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()移到不再有元素。