我正在使用.NET,C#,LINQ到实体和SQL Server 2008编写应用程序。
我想从表中随机选择一行。有没有办法使用LINQ查询实现这一点。一种方法是从表中获取行列表,然后随机选择其中一行,这非常简单。
好奇,如果有办法在LINQ中包含randomness属性。
答案 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
(仅有意义)。