【发布时间】:2013-12-21 02:56:27
【问题描述】:
总结:我想找到一种使用 Entity Framework 和 MySQL 进行随机排序的方法(这很重要)。该解决方案不应在从数据库加载所有值之后使用原始 sql 查询或排序。
我的尝试:
我想到了使用 NewGuid() 来自 that answer 的随机顺序。
代码:
var query = from e in context.Table
orderby Guid.NewGuid()
select e;
var test = query.FirstOrDefault();
总是抛出异常:
An error occurred while executing the command definition. See the inner exception for details.
Inner exception:
FUNCTION MyDatabase.NewGuid does not exist System.Exception {MySql.Data.MySqlClient.MySqlException}
似乎问题在于 MySQL 没有函数 NewGuid()。
如何通过 MySQL 函数 RAND() 而不是 NewGuid() 进行排序。也就是说,如何在Entity Framework中使用自定义函数RAND?
【问题讨论】:
-
您有一个 PK 为
Guid的实体,并试图通过创建新的Guids 来订购?如果是这种情况,你应该order by e.NameOfYourId。 -
@Tico,不,我没有 Guid 字段。我的 PK 是具有自动增量的整数。 NewGuid() 是用于(在这种情况下)随机顺序的函数。所以每个查询结果都是不同的。我从这里 stackoverflow.com/a/4120132/596207 了解了 NewGuid()
-
静态方法
Guid.NewGuid()创建一个新的有效Guid,因此您基本上是在不“有效”的条件下订购您的查询。我认为最好列出所有元素,然后将它们随机化。 -
问题中的编辑(当前代码):,它似乎正在工作。
-
@Tico,它有效 :) 几乎是我目前用作解决方法的那个变体(区别在于我使用
AsEnumerable()而不是ToList())。我不经常使用这种变体的原因是从数据库加载到客户端的所有行而不是有限的行(例如 500 行而不是 10 行)。无论如何,感谢您帮助调查此案。
标签: c# mysql entity-framework