代码之家  ›  专栏  ›  技术社区  ›  pencilslate

Linq to Entities查询以随机化行选择

  •  4
  • pencilslate  · 技术社区  · 15 年前

    我正在使用.NET、C_、Linq to Entities和SQL Server 2008编写应用程序。

    我想从一张桌子上随机挑选一行。有没有一种方法可以使用LINQ查询来实现这一点?一种方法是从表中获取行列表,然后随机选择其中一行,这是非常直接的。

    只是好奇,如果有一种方法可以在LINQ中包含随机性属性。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Ben M    15 年前

    如果没有保证的连续ID空间,则需要对表应用某种排序,计算记录数,跳过随机数,然后取一个。所以:

    var query = 
        from item in db.Items
        orderby item.Id 
        select item;
    
    // a random number in 0..count-1
    var rownum = new Random().Next(query.Count() - 1);
    
    var row = query
        .Skip(rownum)
        .Take(1);
    

    排序是必需的,因为Linq to实体不支持 Skip 在未排序的集合上(仅有意义)。

        2
  •  6
  •   Robert Venables    15 年前

    请原谅伪代码:

        static IEnumerable<RowType> RandomRows()
        {
            while (true)
            {
                yield return GetRowByID((new Random).Next(NumberOfRowsInTable));
            }
        }