【发布时间】:2009-08-18 02:22:27
【问题描述】:
我正在使用 .NET、C#、LINQ to entity 和 SQL Server 2008 编写应用程序。
我想从表中随机选择一行。有没有办法使用 LINQ 查询来实现这一点。一种方法是从表中获取行列表,然后随机选择其中一个,这非常简单。
只是好奇,如果有办法在 LINQ 中包含随机属性。
【问题讨论】:
标签: c# .net linq linq-to-entities
我正在使用 .NET、C#、LINQ to entity 和 SQL Server 2008 编写应用程序。
我想从表中随机选择一行。有没有办法使用 LINQ 查询来实现这一点。一种方法是从表中获取行列表,然后随机选择其中一个,这非常简单。
只是好奇,如果有办法在 LINQ 中包含随机属性。
【问题讨论】:
标签: c# .net linq linq-to-entities
请原谅伪代码:
static IEnumerable<RowType> RandomRows()
{
while (true)
{
yield return GetRowByID((new Random).Next(NumberOfRowsInTable));
}
}
【讨论】:
如果您没有保证顺序的 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(仅有意义)。
【讨论】: