查询实体框架中的第n行

Sve*_*der 3 c# entity-framework

我想从每个实体框架的表中查询一个随机行.

我现在能想到的最好的解决方案是从表中获取总计数,然后根据C#计算得到计数范围内的随机数,然后查询该随机行数.

我的问题是我无法弄清楚如何直接查询每个实体框架的某个行号.我想防止我需要查询整个表,然后从那里选择行号.

或者我在这里有一个普遍的误解,有一个更简单的方法?

Aka*_*ava 6

// DO NOT USE THIS FOR MORE THEN 100 ROWS
var randomRecord = foos.OrderBy( x=> SqlFunctions.Rand() ).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

但是这种方法效率较低,

// USE THIS FOR MORE THEN 100 ROWS
var random = Math.Random(foos.Count());

var randomRecord = foos.OrderBy( x=> x.id ).Skip( random ).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

对于数据库,查询计数比实际对数千条记录执行SORT over RANDOM要少得多.由于RANDOM肯定没有编入索引,因此排序需要很长时间.所以避免使用第一种方法,使用最好的第二种方法.