![]() |
1
4
我的第一个想法和Ron Klein的一样——创建一个加权列表并从中随机选择。 这里有一个LINQ扩展方法,可以从普通列表创建加权列表,给定一个lambda函数,该函数知道对象的权重属性。 如果你没有马上得到所有的泛型,别担心。。。下面的用法应该更清楚:
|
![]() |
2
2
我假设权重是一个整数。这里有一种方法,它连接到一个虚拟表,以增加每个权重的行数;首先,让我们在TSQL上证明一下:
这将输出如下内容:
现在我们将消耗这些;在
这个LINQ到SQL查询与我们编写的TSQL的关键部分非常相似;让我们测试一下:
这看起来一点也不糟糕——它有两个表和范围条件,以及
同样,我们得到了正确的发行版,从LINQ到SQL。分类? |
![]() |
3
1
从问题中可以看出,您建议的解决方案绑定到Linq/Linq2Sql。 如果我理解正确,您的主要目标是从数据库中最多获取X条记录,这些记录的权重大于0。如果数据库包含X条以上的记录,您希望使用记录的权重从中进行选择,并得到一个随机结果。
然而,克隆这些记录会造成复制。所以你不能只取X条记录,你应该取越来越多的记录,直到你有X条不同的记录。
我认为使用 如果总数 是 巨大的,我建议您随机(通过Linq2Sql)选择100000条(或更少)记录,并按上述方式应用实现。我相信这已经够随机的了。 |
![]() |
4
1
尝试使用RAND()sql函数-它将给您一个0到1的浮点值。 缺点是,我不确定这是否会导致sql server端的完整表扫描,也就是说,sql上的查询+执行是否会以这样一种方式进行优化,即一旦您拥有前n条记录,它就会忽略表的其余部分。 |
![]() |
5
1
|
![]() |
6
0
在您正在查看的SQL示例中使用GUID(NEWID)函数的原因很简单,SQL Server RAND函数只对每条语句计算一次。所以在随机选择中是无用的。
var ws=db.WorkTypes .OrderByDescending(e=>rand.Next(10)*e.SeoPriority) .拿(拿)去排队;
它不是100%的准确度,但很接近,调整下一个值可以调整它。 |
![]() |
ecology · 基于R中随机生成数集的子集列 2 年前 |
![]() |
Alan Jones · 使用random从列表创建动态列表 2 年前 |
![]() |
breking bed · 单击按钮时如何随机选择唯一编号 2 年前 |
![]() |
Carrot Man · 如何让熊猫数据框随机填充1和0? 2 年前 |
![]() |
Justin Arnold · 范围内的随机数不是随机数 2 年前 |
![]() |
Menna Magdy · 如何使用非模型字段进行过滤? 2 年前 |