nhibernate 选择 n 个随机唯一记录

本文关键字:唯一 记录 随机 选择 nhibernate | 更新日期: 2023-09-27 18:34:42

这之前已经问过很多次了,但我找不到一个决定性的答案。任何人都可以协助

我希望能够使用 nhibernate 查询我的数据库(将我的 sqlServer 和 mysql(以获得 X 行数。 这些数字必须是唯一的。我从 250 个中选择 350 个,所以我的几率很高,我会有重复项(因为随机 doent 意味着唯一(

这需要同时适用于 mysql 和 sql 服务器。

由于我已经选择了超过 70% 的表,所以我不介意选择所有记录,并使用 LINQ 剔除 250 个唯一值(如果可能的话(

对我的系统开销影响最小的任何东西。

谢谢!

nhibernate 选择 n 个随机唯一记录

您可以使用 RAND(( 或 NEWID(( 对结果进行排序并选择前 250 个 - 结果将是不同且随机的,就效率而言,这将比检索所有 350 个结果然后在代码中随机排序更有效 - 如果忽略缓存

但是,如果您确实缓存了结果,随着时间的推移,将 350 个结果检索到缓存中(最好使用 NHibernate 的二级缓存(,然后使用如下所示的代码对它们进行排序可能会更有效:

var rand = new Random();    
var results = Session.CreateCriteria<MyClass>()
   .SetCacheable(true)
   .List()
   .OrderBy(x => rand.Next());

您正在寻找独特的,添加 .在.ToList((;

我想你已经回答了自己。

与针对 250 条记录的

复杂随机化和分页查询相比,对 350 条记录的全表查询对服务器造成的压力更小(这通常是通过将唯一标识符附加到内部查询中的行,然后使用它进行排序来完成的。你不能用 LINQ 做到这一点(

您甚至可以缓存结果,然后每次将列表随机化到内存中,以获得 250 条不同的记录。