我想从每个实体框架的表中查询随机行。
目前我能想到的最好的解决方案是从表中获取总计数,然后使每个C#函数获得一个在计数范围内的随机数,然后查询该随机行数。
我的问题是我无法弄清楚如何直接查询每个实体框架的特定行号。我想避免需要查询整个表,然后从那里选择行号。
还是我在这里有一个普遍的误解,还有更简单的方法吗?
// DO NOT USE THIS FOR MORE THEN 100 ROWS
var randomRecord = foos.OrderBy( x=> SqlFunctions.Rand() ).FirstOrDefault();
但是这种方法的效率不如
// USE THIS FOR MORE THEN 100 ROWS
var random = Math.Random(foos.Count());
var randomRecord = foos.OrderBy( x=> x.id ).Skip( random ).FirstOrDefault();
对于数据库而言,查询计数要比实际通过数千条记录通过RANDOM执行SORT的开销要少得多。由于RANDOM当然没有被索引,因此排序将花费很长时间。因此,避免使用第一种方法,最好使用第二种方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句