我已经查看了this answered question和有关堆栈溢出的其他文章。我更喜欢Skip
方法。但是,它们都是单个记录。现在假设我要从一个表中获取20条随机记录,该怎么办?
我正在尝试两种可能性:
生成一个索引数组,并对每个索引使用“跳过”。但是,这会导致20个查询(每个查询也都由ID排序)。
获取所有ID的列表,然后随机选择一个数组,并执行第二次查询以获取所有选定ID的详细信息。
或者只是使用OrderBy
作为其他建议的帖子。我认为这可能很糟糕,因为整个表都是有序的?
请告诉我是否有更好的解决方案。
答案 0 :(得分:0)
您是否可以使用Stored Proc来做到这一点?
所以您的StoredProcs工作是将20条记录返回给调用方(我想这是一些在线考试:D)
在sql端,您可以使用SQL Rand()为表中的所有行生成随机数。然后按此Random列的Asc / Desc值对它们进行排序,并选择前20名。
答案 1 :(得分:0)
通过随机guid对表进行排序不会对表产生任何影响。 Linq解决方案实现了您想要做的事情。
private IEnumerable<MyClass> GetRandomItems(int n)
{
return _dbContext.MyClass.OrderBy(x => Guid.NewGuid()).Take(n);
}