SQL Server /实体框架 - 如何按随机数排序然后稍后重现结果?

2024-03-13

我使用 ASP.NET MVC 5 和实体框架以及 Microsoft SQL Server 后端。

简短版本,我想执行搜索,按随机数对其中的部分进行排序,然后能够稍后显示搜索结果。

详细版本,理论上假设我有一家商店,有 100 万件商品。每个商品有 5 个不同的卖家。我使用实体框架来提取仅由 1 个卖家加入的所有 100 万条记录。该卖家是通过随机编号订购并首先选择来随机挑选的。假设结果页面显示 10 个结果,一旦我转到第 2 页,然后返回第 1 页,我希望第一个商品具有与第一次选择的相同的随机卖家,而不是再次随机选择卖家。如果他们查看卖家的一件商品,然后再看一遍,发现商品有所不同,那将是一种糟糕的用户体验。价格会发生变化等等。

现在我已经通过制作搜索结果表“解决”了这个问题。我将随机挑选的卖家与搜索到的商品一起存储。这样搜索后,我只看搜索结果表,而不用再次执行搜索。当我有 100 条左右的项目时,这很好,但现在我可能有大量记录,而且我不想每次搜索存储 100 万条记录。

除非有人认为有更好的方法,否则我想到了一些我不确定如何应用的东西。如果我可以存储随机数的生成方式,然后存储仅包含该“种子”的搜索结果的 1 条记录,然后我使用该种子再次执行搜索,那么每次都会随机地首先返回同一个卖家。

这样的事情可能吗?如果是这样,我如何在实体框架中调用随机,同时为其提供种子以产生相同的结果?

更希望答案涉及实体框架。

Edit

我尝试了实体框架评论中提到的随机想法,如下所示:

var test = DateTime.Now.Ticks;
Random rand = new Random((int)test);

query.OrderBy(o => rand.Next()).ToList()

//Save test in database so we can retrieve it later to get the same results

我得到了例外:

“LINQ to Entities 无法识别‘Int32 Next()’方法,并且该方法无法转换为存储表达式。”

我觉得如果我能让实体框架发挥得很好,这就是答案。


您可以创建/存储一个随机数(种子):

int seed = new Random().Next(1, 1000);

然后使用CHECKSUM https://learn.microsoft.com/en-us/sql/t-sql/functions/checksum-transact-sql将种子和记录的 ID 结合起来以创建可重现的序列,如下所示:

query.OrderBy(x => SqlFunctions.Checksum(x.ID, seed, x.ID))
     .ThenBy(x => x.ID) // Just in case two checksums produce the same value;

SqlFunctions.Checksum https://msdn.microsoft.com/en-us/library/dn177090(v=vs.113).aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server /实体框架 - 如何按随机数排序然后稍后重现结果? 的相关文章

随机推荐

  • gcc 不匹配标签选项给出“无法识别的命令行选项”

    我试图激活该选项 Wmismatched tags在 gcc 上 检测不一致的类 结构声明 这可能在使用前向声明时发生 但在 Ubuntu 上我得到 c error unrecognized command line option Wmis
  • “替换”功能示例

    我没有找到该项目的帮助页面replace函数从base包很helpful 最糟糕的是 它没有可以帮助理解其工作原理的示例 您能解释一下如何使用它吗 举一两个例子就太好了 如果您查看该函数 通过在控制台中输入其名称 您会发现它只是一个简单的函
  • 我想仅为特定资源运行 terraform

    运行 terraform 并等待需要很长时间 所以我想运行它来排除执行时间最长的rds 或者我只想运行 ec2 资源 有没有办法在地形中做这样的事情 您可以使用 target resource https www terraform io
  • 为什么 DirectFB 没有在 GNU/Linux 中得到更广泛的应用?是否存在 X11 中不存在的严重限制?

    据我了解 DirectFB为多种显卡提供硬件加速 此外 它比 X11 更小 更快 并且占用的内存更少 那么 为什么它没有比现在更主流呢 我真正不确定的是 常见的 GTK Qt 程序是否需要移植到它 在 DirectFB 网站上 有一个将 F
  • 带有 JDBC 准备语句的字符串中的圆括号

    这是我的 Java JDBC 代码 例如修改和简化的 ps connection prepareStatement SELECT a b c FROM mytable WHERE category ps setString 1 my sup
  • C语言数据类型算术规则

    在 C 编程中 如果我在下面的等式中使用变量 k X Y n 其中 exp 是数学常数 e 提升到 pi 3 14159 j sqrt 1 并且这些变量都被声明为 64b 双精度浮点数 其中 X 是复数 输出的结果也将是这种数据类型 out
  • Angular 2 悬停事件

    在新的Angular2框架 有谁知道像事件一样进行悬停的正确方法吗 In Angular1有ng Mouseover 但这似乎并没有被延续下来 我浏览了文档但没有发现任何内容 如果你想在任何 HTML 元素上执行类似悬停的事件 那么你可以这
  • C# 查找解决方案中的所有测试

    我是否可以使用任何技术来查找解决方案中注释为测试的所有测试 TestMethod Fact Theory 语境 我对这一切都很陌生 但正在尝试制定持续部署策略 我想在发布过程期间 之后找到并运行解决方案中的所有测试 这些不是依赖于构建的单元
  • 有多少 WebGL 内存可用?当我用完时会发生什么?

    GPU 内存是有限的 通常比 JS 堆大小等更有限 诸如大量高分辨率图像之类的东西可能会填满内存 而且它是共享资源 因此其他应用程序可能会使用大量内存 在 OpenGL 中 我可以查询可用内存 WebGL 有没有办法做同样的事情 我怎样才能
  • 在回收器视图上创建上下文菜单时,menuInfo 为 null

    我试图在回收器视图中单击项目时显示上下文菜单 并选择呼叫姓名被单击的人 但我无法检索电话号码 因为 getMenuInfo 不起作用 因为我在 onCreateContextMenu 的 contextMenuInfo 中得到 null 我
  • 在 C++ 中打印星号“三角形”

    我想制作一个打印此类输出的通用代码 这意味着用户可以输入任何值 整体 for 5 and for 3 这是我做的 但它打印出直角三角形 任何帮助 提前致谢 include
  • 如何避免在我的应用程序启动时中断已在播放的音频?

    我有一个应用程序需要使用AVAudioSessionCategoryPlayback为了在设备锁定或我的应用程序在后台时播放声音 这是一个闹钟功能 所以我还需要在 UIBackgroundModes 列表中设置 音频 键 我已将以下代码放入
  • 将事件处理程序附加到代码生成的数据模板

    我有一个相关问题this one https stackoverflow com questions 59451 creating a silverlight datatemplate in code 我正在尝试将事件附加到我的 Stack
  • Playframework 和 Twitter 流 API

    如何从 Twitter Streaming API POST 状态 过滤器读取响应数据 我已建立连接并收到 200 状态代码 但我不知道如何阅读推文 我只想在推文出现时将其打印出来 ws url url sign OAuthCalculat
  • 僵尸进程的父进程终止后会发生什么?

    我只是好奇 如果僵尸进程的父进程不关心等待它 会发生什么 假设 我们有一个父母和一个孩子 子进程先于父进程终止 来自APUE 内核为每个终止进程保留少量信息 最少该信息包括进程 ID 进程的终止状态 家长需要使用以下方式获取此信息waitp
  • 拥有方的主键作为连接列

    NOTE 主题很长但很详细 如果您使用 Doctrine2 和 oneToOne 关系 可能会派上用场 最近在Doctrine中遇到一个问题 我创建了具有 oneToOne 双向关系的 User 和 UserData 对象 User one
  • 将 Promise 包装在 async/await 中

    我在 async await 和从 Promise 返回值方面遇到了一些困难 function test return new Promise resolve reject gt resolve Hello async function c
  • 浏览器对蓝牙信标/iBeacons 的感知

    有没有办法让浏览器知道其附近的 iBeacon 设备 类似于 HTML5 地理定位的工作方式 如果不是 这是否可以通过浏览器插件来实现 该插件可以提供 javascript 使用的详细信息 很不幸的是 不行 没有 Web 浏览器在信标检测和
  • 在 C++ 中使用的脚本语言中在运行时创建新的类/成员 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我已经断断续续地解决这个问题几个月了 现在想要真正想出一个正确的解决方案来处理使用成员函数创建新的用户定
  • SQL Server /实体框架 - 如何按随机数排序然后稍后重现结果?

    我使用 ASP NET MVC 5 和实体框架以及 Microsoft SQL Server 后端 简短版本 我想执行搜索 按随机数对其中的部分进行排序 然后能够稍后显示搜索结果 详细版本 理论上假设我有一家商店 有 100 万件商品 每个