c# - Linq OrderBy 逻辑

标签 c# linq

我试图了解以下 LINQ 查询的自定义排序逻辑:

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

这种比较的内在逻辑是什么?我如何在内部与 random.NextDouble() 进行比较,使结果列表始终不同?

最佳答案

相当于:

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 实现了排序键,以便为每个元素准确计算一个排序键。它这样做是为了性能和(在您的情况下)为了正确性。

关于c# - Linq OrderBy 逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14478262/

相关文章:

c# - 如何在 C# 中通过 linq 更新字段表?

.net - 在 LINQ 中与匿名类型不同(在 VB.NET 中)

c# - 如何使用 LINQ 根据子项和比较器之间的交叉值过滤和操作结果?

c# - LINQ 查询(按项目组分组)

c# - 用C#通过串口发送一个64字节的数据包

c# - 将参数传递给方法

c# - 如何在C#中调用C++ DLL

c# 将键盘命令发送到另一个窗口/进程

c# - 不用gmail发送邮件

entity-framework - 如何使用linq按星期几分组