【问题标题】:LINQ to entities Query to randomize row selectionLINQ to entity 查询以随机化行选择
【发布时间】:2009-08-18 02:22:27
【问题描述】:

我正在使用 .NET、C#、LINQ to entity 和 SQL Server 2008 编写应用程序。

我想从表中随机选择一行。有没有办法使用 LINQ 查询来实现这一点。一种方法是从表中获取行列表,然后随机选择其中一个,这非常简单。

只是好奇,如果有办法在 LINQ 中包含随机属性。

【问题讨论】:

    标签: c# .net linq linq-to-entities


    【解决方案1】:

    请原谅伪代码:

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

    【讨论】:

    • 在您发表评论之前编辑已提交的 30 秒 :-)
    【解决方案2】:

    如果您没有保证顺序的 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 Entities 不支持对无序集合使用 Skip(仅有意义)。

    【讨论】:

      猜你喜欢
      • 2012-04-04
      • 1970-01-01
      • 2010-10-13
      • 2016-05-21
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多