C# nhibernate选择n个随机唯一记录

C# nhibernate选择n个随机唯一记录,c#,mysql,linq,sql-server-2008,nhibernate,C#,Mysql,Linq,Sql Server 2008,Nhibernate,这个问题以前被问过很多次,但我找不到一个结论性的答案。有人能帮忙吗 我希望能够使用nhibernate查询我的数据库(将是我的sqlServer和mysql),以获得X行数。这些数字必须是唯一的。我从350个中选择了250个,所以我很有可能会有重复的(因为随机并不意味着唯一) 这需要同时适用于mysql和sql server 因为我已经选择了表的70%以上,所以我不介意选择所有记录,并使用LINQ输出250个唯一值(如果可能的话) 对我的系统开销影响最小的内容 谢谢 如果要查找distinct,

这个问题以前被问过很多次,但我找不到一个结论性的答案。有人能帮忙吗

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

这需要同时适用于mysql和sql server

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

对我的系统开销影响最小的内容


谢谢

如果要查找distinct,请在.ToList()之前添加.distinct()我想你已经回答了自己的问题

对于350条记录的完整表查询比对于250条记录的复杂随机化和分页查询对服务器的压力要小(通常是通过在内部查询的行中添加一个uniqueidentifier,然后使用它进行排序来完成的。您不能用LINQ来完成这项工作)


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

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

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

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