使用实体框架获取多条随机记录?

时间:2018-10-01 04:21:55

标签: c# sql sql-server entity-framework random

我已经查看了this answered question和有关堆栈溢出的其他文章。我更喜欢Skip方法。但是,它们都是单个记录。现在假设我要从一个表中获取20条随机记录,该怎么办?

我正在尝试两种可能性:

  1. 生成一个索引数组,并对每个索引使用“跳过”。但是,这会导致20个查询(每个查询也都由ID排序)。

  2. 获取所有ID的列表,然后随机选择一个数组,并执行第二次查询以获取所有选定ID的详细信息。

  3. 或者只是使用OrderBy作为其他建议的帖子。我认为这可能很糟糕,因为整个表都是有序的?

请告诉我是否有更好的解决方案。

2 个答案:

答案 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);
}