Linq OrderBy逻辑

时间:2013-01-23 11:10:13

标签: c# linq

我正在尝试理解以下LINQ查询的自定义排序逻辑:

 var random = new Random();
 var cnt = Enumerable.Range(0, 10).OrderBy(i => random.NextDouble()).ToList();

这种比较的内在逻辑是什么?我如何比较random.NextDouble()使结果列表总是不同?

2 个答案:

答案 0 :(得分:8)

相当于:

var cnt =
Enumerable.Range(0, 10)
.Select(i => new { i, rand = random.NextDouble() }) //"weave" the random temporary
.OrderBy(x => x.rand) //sort
.Select(x => x.i) //remove it
.ToList();

随机值在逻辑上成为列表的一部分。

作为一个实现细节(从.NET 2.0到4.5),OrderBy实现了排序键,因此对每个元素只计算一个。它是为了提高性能和(在您的情况下)正确性。

答案 1 :(得分:4)

这是一个改组数组的简单实现。 random.NextDouble()每次都会给出一个随机数,因此输出序列顺序是随机的。