2012-05-21 52 views
0

这已被问过很多次,但我无法找到一个结论性的答案。任何人都可以协助nhibernate选择n个随机唯一记录

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

这需要为mysql和sql server工作。

,因为我选择在桌子上的70%了,我不介意选择的所有记录,并使用LINQ to PUL了250个唯一值(如果可能的话)

任何具有影响最小我的系统开销。

谢谢!

回答

0

您可以使用RAND()或NEWID()命令查询结果并选择前250个结果 - 效率方面,结果将是截然不同的随机数据,这将比检索所有350个结果更有效,然后对它们进行排序随机在代码中 - 如果你忽略缓存

但是,如果你确实缓存了结果,那么随着时间的推移将350个结果检索到缓存(最好使用NHibernate的二级缓存)然后将它们排序代码使用类似:

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

您正在寻找独特的,在.ToList()之前添加.Distinct()

0

我想你已经回答了你自己。

350个记录A的全表查询将要少放应变在服务器上比250复杂的随机化和分页查询(即通常是通过在内部查询追加一个唯一标识符的行,然后用它排序完成。你不能用LINQ做到这一点)

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