nhibernate选择n随机唯一记录

时间:2012-05-21 07:59:28

标签: c# mysql linq sql-server-2008 nhibernate

这已被多次询问过,但我无法找到确凿的答案。任何人都可以协助

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

这需要适用于mysql和sql server。

因为我已经选择了超过70%的表,我不介意选择所有记录,并使用LINQ来输出250个唯一值(如果可能的话)

对我的系统开销影响最小的任何事情。

谢谢!

3 个答案:

答案 0 :(得分:0)

您正在寻找不同的,在 .ToList();

之前添加 .Distinct()

答案 1 :(得分:0)

我想你已经回答了自己。

350个记录的全表查询对服务器的压力要小于250的复杂随机化和分页查询(通常通过将唯一标识符附加到内部查询中的行然后使用它进行排序来完成)。你无法用LINQ做到这一点

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

答案 2 :(得分:0)

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

但是,如果你确实缓存了结果,那么随着时间的推移,将350个结果检索到缓存(最好使用NHibernate的二级缓存),然后使用类似的东西在代码中对它们进行排序可能会显着提高效率:

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