我看过以下内容:
我现在正在做的-为了获得三个随机元素-以下内容:
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);
但是,对于大型数据集而言,这似乎效率不高。另一种建议是采用.Count()
IQueryable的方法,选择该结果内的n个随机数,然后使用所选的随机索引向数据库查询...但是Count()
这里可能会很昂贵。
以下应该工作:
users.OrderBy(_ => Guid.NewGuid()).Take(3)
这将从用户表中检索前3个元素,同时按每次不同的值对它们进行排序。
与AD.Net的答案相比。好吧,您需要随机生成的用户ID列表。.它不建议这样做的方法
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句