为了账号安全,请及时绑定邮箱和手机立即绑定

从Linq到SQL的随机行

从Linq到SQL的随机行

慕的地10843 2019-06-24 16:17:32
从Linq到SQL的随机行当我有条件时,使用Linq到SQL检索随机行的最佳(也是最快的)方法是什么,例如某些字段必须是真的?
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

我只是注意到这是LINQtoSQL,而不是LINQtoObjects。使用Marc的代码获取数据库来为您完成此操作。我把这个答案放在这里,作为LINQtoObjects的潜在兴趣点。

奇怪的是,你其实不需要拿到伯爵。但是,除非得到计数,否则需要获取每个元素。

您可以做的是保留“当前”值和当前计数的概念。获取下一个值时,取一个随机数,并将“Current”替换为“new”,概率为1/n,其中n是计数。

所以当您读取第一个值时,使之成为“当前”值。当您读取第二个值时,强权使其为当前值(概率为1/2)。当您读取第三个值时,强权使当前值(概率为1/3)等等,当您用完数据时,当前值是您所读取的所有值中的随机值,且概率是一致的。

若要将其应用于条件,只需忽略任何不符合条件的内容。最简单的方法是首先应用WHERE子句,只考虑开头的“匹配”序列。

下面是一个快速实现。我没事的.。

public static T RandomElement<T>(this IEnumerable<T> source,
                                 Random rng){
    T current = default(T);
    int count = 0;
    foreach (T element in source)
    {
        count++;
        if (rng.Next(count) == 0)
        {
            current = element;
        }            
    }
    if (count == 0)
    {
        throw new InvalidOperationException("Sequence was empty");
    }
    return current;}


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 401 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信