0

这已经被问过很多次了,但我找不到一个确凿的答案。谁能帮忙

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

这需要对 mysql 和 sql server 都有效。

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

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

谢谢!

4

3 回答 3

0

您正在寻找不同的,在 .ToList(); 之前添加.Distinct ();

于 2012-05-21T09:45:18.980 回答
0

我想你已经回答了自己。

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

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

于 2012-05-21T13:07:33.327 回答
0

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

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

var rand = new Random();    
var results = Session.CreateCriteria<MyClass>()
   .SetCacheable(true)
   .List()
   .OrderBy(x => rand.Next());
于 2012-05-21T13:34:03.773 回答