c# - Guid.NewGuid() 在 LINQ to Entities 中做什么?

标签 c# entity-framework linq

我编写了一个 LINQ to Entities,它使用了以下 OrderBy:

.OrderBy(i => Guid.NewGuid())

上面随机化了数据集的顺序,因此每次运行此代码都会产生不同的顺序。

但是,如果我执行以下任一操作,数据集将不会随机化,并且对于所有 3 个 OrderBy 都是完全相同的,请参见下文:

.OrderBy(i => new Guid("5fd3e5e7-b172-42f5-a4dd-da4212201a31"))
.OrderBy(i => new Guid("beb7345c-1421-48e0-b177-51b2bb065214"))

Guid g = Guid.NewGuid();
.OrderBy(i => g)

可以看到上面的3个OrderBy使用的是不同的Guid,为什么会产生相同的订单呢?为什么每次我运行这段代码时 Guid.NewGuid() 都会随机化列表,而其他 3 个 OrderBy 语句每次都产生相同的结果?

我的问题是,我需要将一个值传递给一个函数,该函数在 LINQ to Entities 数据集中用于根据值随机化结果,但是我还需要能够传递相同的值并检索相同的随机顺序。

谢谢。

最佳答案

当您拥有 Guid.NewGuid() 时,此行为是 Entity Framework 中的设计,它模仿 SQL 的 ORDER BY NEWID(),以允许随机排序。当您指定常量 Guid 时,它仅按此常量值排序。

关于c# - Guid.NewGuid() 在 LINQ to Entities 中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41487665/

相关文章:

c# - 最小 API - 如何在静态类中使用 ILogger

c# - 如何使用 EF 在 ASP.NET MVC 中自动创建数据库和存储库?

c# - Linq toEntity DbQuery 对象严重失败

asp.net-mvc-3 - 如何为 MVC3 生成服务层和存储库层

wpf - 如何从 LINQ 转移到 SQL 到 "LINQ to WCF"?

c# - 如果不为空则从属性中获取值,否则使用 Linq 获取其他属性

c# - 为什么只有整数枚举?

c# - 如何循环用户控件

c# - 在保存到数据库之前检查类是否为新实例或至少填充一次属性

c# - LINQ 中的分组 - 简单问题