LINQ to entities查询随机化行选择

时间:2009-08-17 18:00:08

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

我正在使用.NET,C#,LINQ到实体和SQL Server 2008编写应用程序。

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

好奇,如果有办法在LINQ中包含randomness属性。

2 个答案:

答案 0 :(得分:6)

请原谅伪代码:

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

答案 1 :(得分:4)

如果您没有保证顺序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(仅有意义)。