在C#中使用Linq或lambda从数据库中的表中获取X个随机元素
我有一个x用户数据库,我想随机获取所有用户,然后在我的网站上写出50个用户。 现在我只使用.take(50)
并检索最新的50个用户。 我希望它从整个表中随机抽取50个,任何想法?
这就是我现在的代码:
userList = userList.OrderBy(user => -user.ID).Take(userCount).ToList();
注意: userlist
是我所有用户的列表。 正如你所看到的那样,我现在正在使用lambda和一个名为userCount的变量,在那里我说明要列出多少用户!
试试这个
Random rnd = new Random(); userList = userList.OrderBy(user => rnd.Next()).Take(usercount).ToList();
如果可以加载所有用户然后再加载其中的50个,则可以使用这样的while循环:
List
有两种方法可以执行此操作,具体取决于系统中有多少用户
1。
List ids = new List (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个。 这取决于你,这是一个更好的方法。
假设您的实体中有一个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));
无随机扩展
public static class MyExtensions { public static IEnumerable GetRandomItems (this IEnumerable source, Int32 count) { return source.OrderBy(s => Guid.NewGuid()).Take(count); } }
现在你可以
userList = userList.GetRandomItems().ToList();
- 如何在WCF服务中使用IDispatchMessageInspector?
- Flyout上的VisualStateManager不突出显示整个区域
- 在更新文档中的数组时,如何在MongoDB和C#中使用$ push update修饰符
- 检查应用程序是否已安装
- 如何在C#/ ASP.NET中的http://someurl/myimage.jpg中检查图像是否存在
- 索引切换语句,或等效? .net,C#
- 添加.NET Framework DLL作为对Windowsapp store应用的参考
- 使用LINQ在List中查找项目但获取“Value不能为null。 参数名称:source“
- while循环中的可变初始化