IEnumerable<object> myCollection = ...;
var myList = myCollection.ToList();
var rng = new Random();
var randomIndex = rng.Next(0, myList.Count);
var randomItem = myList[randomIndex];
// 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();
1条答案
按热度按时间r1wp621o1#
您不能从
IEnumerable
中选择随机项,因为它是一个生成值的生成器。它没有大小,因此您可能正在处理一个无限的IEnumerable
,这使得无法选择随机项。一种解决方法是从初始集合中创建一个
List<T>
(大小为),然后随机选择一个项目。但是在您的情况下,您不希望获取表的所有数据,而是可以在sql请求中进行计算。
这里有一个link演示了如何做到这一点。
偷偷看一下,以防失效