我有一个x用户数据库,我想随机获取所有用户,然后在我的网站上写出50个用户。
现在我只使用.take(50)
并检索最新的50个用户。我希望它能从整个桌子随机抽取50个任何想法吗?
这就是我现在的代码:
userList = userList.OrderBy(user => -user.ID).Take(userCount).ToList();
注意: userlist
是我所有用户的列表。正如你所看到的那样,我现在正在使用lambda和一个名为userCount的变量,在那里我说明要列出多少用户!
答案 0 :(得分:25)
试试这个
Random rnd = new Random();
userList = userList.OrderBy(user => rnd.Next()).Take(usercount).ToList();
答案 1 :(得分:0)
根据系统中的用户数量,有两种方法可以执行此操作
1
List<int> ids = new List<int>(50);
int total = userList.Count();
Random r = new Random();
while (ids.Count() < 50)
{
var next = r.Next(total);
if (!ids.Contains(next))
ids.Add(next);
}
var users = userList.Where(a => ids.Contains(a.ID));
2
MikeSW打败了那个人
选项之间的区别在于:1)涉及对数据库的2个查询查询; 2)涉及从数据库加载所有用户以加载其中的50个。这取决于你,这是一种更好的方式。
答案 2 :(得分:0)
当可以加载所有用户然后再加载50个用户时,可以使用这样的while循环:
List<object> randomUsers = new List<User>();
Random r = new Random();
while (randomUsers.Count < 50)
{
userList
// skip previously selected users
.Except(randomUsers)
// random number to skip a random amount of users
.Skip(r.Next(0, userList.Count() - 1 - randomUsers.Count))
// and then take the next one
.First();
}
答案 3 :(得分:0)
假设您的实体中有一个Id主键列,我建议您使用以下查询,否则您将无缘无故地删除大量数据。
var rnd = new Random();
// Get the employeeIds.
var employeeIds = EmployeeService.Data()
.Select(e => e.Id)
.ToList();
// Choose n number of random employeeIds.
var randomEmployeeIds = employeeIds
.OrderBy(id => rnd.Next())
.Take(x);
// Get random employees.
var employees = EmployeeService.Data().Where(emp => randomEmployeeIds.Contains(emp.Id));
答案 4 :(得分:0)
无随机扩展
public static class MyExtensions
{
public static IEnumerable<T> GetRandomItems<T>(this IEnumerable<T> source, Int32 count)
{
return source.OrderBy(s => Guid.NewGuid()).Take(count);
}
}
现在你可以
userList = userList.GetRandomItems().ToList();