如何使用LINQ从IEnumerable中选择随机项

g6ll5ycj  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(204)

我尝试在C#中使用LINQ SELECT语句从特定对象中选择随机项,而不是有序项。我如何将下面的语法翻译为随机选择

random = _dbase.OrderBy(x => x.company).Take(1000);
r1wp621o

r1wp621o1#

您不能从IEnumerable中选择随机项,因为它是一个生成值的生成器。它没有大小,因此您可能正在处理一个无限的IEnumerable,这使得无法选择随机项。
一种解决方法是从初始集合中创建一个List<T>(大小为),然后随机选择一个项目。

IEnumerable<object> myCollection = ...;

var myList = myCollection.ToList();

var rng = new Random();
var randomIndex = rng.Next(0, myList.Count);
var randomItem = myList[randomIndex];

但是在您的情况下,您不希望获取表的所有数据,而是可以在sql请求中进行计算。
这里有一个link演示了如何做到这一点。
偷偷看一下,以防失效

// 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();

相关问题