如何有效地从iquerable中检索随机元素列表
本文关键字:检索 随机 元素 列表 iquerable 有效地 | 更新日期: 2023-09-27 18:05:08
我看到了以下内容:
list的随机元素
我现在要做的——得到三个随机元素——是这样的:
var user1 = users.ElementAt( rand.Next( users.Count() ) );
var user2 = users.Where(u => !u.Equals(user1)).ElementAt( rand.Next( users.Count() ) );
var user3 = users.Where(u => !u.Equals(user1) && !u.Equals(user2)).ElementAt( rand.Next( users.Count() ) );
但这显然是笨重和低效的。如何才能优雅而高效地访问数据库?
编辑:根据下面的答案,我做了如下的扩展方法:
public static IQueryable<T> SelectRandom<T>(this IQueryable<T> list, int count) {
return list.OrderBy(_ => Guid.NewGuid()).Take(count);
}
var result = users.SelectRandom(3);
但是对于大型数据集来说,这似乎是低效的。另一个建议是采取IQueryable的.Count()
,选择n个随机数落在该结果中,然后用所选的随机索引向数据库发送查询…但是Count()
在这里可能很贵。
下面应该可以工作:
users.OrderBy(_ => Guid.NewGuid()).Take(3)
从users表中检索前3个元素,同时按每次不同的值对它们排序。
与AD相比。净的回答. .你需要一个随机生成的用户名列表。它没有建议这样做