【发布时间】:2017-05-01 12:03:07
【问题描述】:
我正在使用 MVC C# 和 SQL Sever。
我有大约 100 个项目,我从中选择了 2 个随机项目。这是由新的 guid 直接排序。
vm = vm.OrderBy(c => Guid.NewGuid()).Take(2).ToList();
但现在我希望能够将项目子集标记为具有更高百分比 (20%) 被选中,然后在以后将另一个子集标记为 50%。
项目列表是静态的。它总是大约 100 项。
我只是想暴力破解它并将 20% 以上的选定项目添加到列表中,他们只是随机选择两次。
vm1 = vm.OrderBy(c => Guid.NewGuid()).Take(1).Single();
vm2 = vm.OrderBy(c => Guid.NewGuid()).Where(_ => _.Id != firstSelectedID).Take(1).Single();
但我想在 SQL 中可能有一种更简洁、性能更高的方式,或者我在 C# 中缺少的东西
【问题讨论】:
-
旁白:Don't use a Guid as a random number generator!。至少改用
Random.Next()。 -
这不是随机数生成器。对于这个用例,使用 Guid 和 Sort 是足够随机的。如果我想要真正的随机,我会使用 random.org
-
好吧,你当然可以忽略Eric Lippert's advice,他说“GUID 保证是唯一的,但不保证是随机的。不要将它们用作随机数。 "
-
您的项目在数据库中还是在内存中?你想用 sql 查询或在内存中执行此操作就可以了(将加载所有 100 个项目)?
-
试想一下:从 (1,2,3) 中抽取一个随机元素,每个元素都有 33,33% 的机会。对于 (1,2,3,3),您有 25% 的 (1,2) 和 50% 的 3
标签: c# sql-server random