来自 MYSQL 中某个范围的 Entity Framework Core 随机记录

Posted

技术标签:

【中文标题】来自 MYSQL 中某个范围的 Entity Framework Core 随机记录【英文标题】:Entity Framework Core random records from a range in MYSQL 【发布时间】:2021-10-26 16:59:38 【问题描述】:

我需要使用 Entity Framework Core(使用 Pomelo 提供程序)从 mysql 数据库中选择 10 条 ID 介于 1 到 600 之间的随机记录。这可能吗?

我尝试了dbContext.MyTable.OrderBy(r => Guid.NewGuid()).Take(10);,如其他线程中所述,但显然它不适用于 MySQL。

有什么想法吗?

【问题讨论】:

“它不起作用”是什么意思? 显然 Mysql 不支持 NewGuid(),如下所述:***.com/q/20714933/13325144 【参考方案1】:
    var ids = new List<int>();
var r = new Random();
for (int i = 0; i < 10; i++)

    ids.Add(r.Next(1,600));

dbContext.MyTable.Where(z => ids.Contains(z.Id)).OrderBy(x => x.Id);

通常需要注意的是,根据 Microsoft Docs 的说法,Random 类“表示伪随机数生成器,它是一种生成满足某些随机性统计要求的数字序列的算法。”

【讨论】:

非常感谢@Marc,它就是这样工作的!唯一没有的是“.Dump()”部分......返回错误“int不包含'Dump'的定义并且没有可访问的扩展方法'Dump'接受'int'类型的第一个参数可以找到(您是否缺少 using 指令或程序集引用?)。我仍在学习 .net,所以我不知道这个错误意味着什么。 是的...对不起。我正在使用 Linqpad。 Dump() 是一个 Linqpad 表达式。我会建议它(与它无关,只是一个热心的用户)。有一个免费版本,但如果你能负担得起,每一美元都是值得的。

以上是关于来自 MYSQL 中某个范围的 Entity Framework Core 随机记录的主要内容,如果未能解决你的问题,请参考以下文章

处理来自数据库的队列时系统范围互斥锁的替代品?

mysql怎么查询在某个时间范围内没有值的数据

5G标准:5G频率范围与频段-FR1FR2Sub-6毫米波

mysql如何查询某个datetime字段的范围是一个小时范围以内的记录,比如查询今天上午八点到九

如何在 MySQL 的某个范围内获得结果,其中某些字段有字母?

使用 Entity Framework 对两个不同的数据库使用 MySQL 和 MSSQL