2009-08-17 50 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