2009-08-17 48 views
4

我使用.NET编写一个应用程序,C#,LINQ到实体和SQL Server 2008LINQ到实体查询随机行选择

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

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

回答

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到实体不支持无序集合Skip(才有意义)。

6

借口伪代码:

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

你是否指'产量回报'? – 2009-08-17 18:08:01

+0

在您评论之前编辑提交30秒:-) – 2009-08-17 18:09:26

+0

非常好的想法/例子 – 2009-08-17 18:10:03