2012-01-06 74 views
3

我想從大約50條記錄的表中檢索15條記錄。但我想要隨機生成所有記錄。如果我隨機輸入一個數字並寫下如下內容:使用Linq to SQL隨機選擇記錄

var result = (from r in sc.Subjects 
       where (r.SubName == sub && r.Level == lev) 
       select r).skip(randomnumber).take(10), 

起始記錄將是隨機的,但接下來的9個將按順序排列。所以任何想法如何我可以有所有10記錄隨機使用LINQ到SQL?

+4

您可以使用第一種方法在這個【答案】(http://stackoverflow.com/a/648247/181108)。 – Stefan 2012-01-06 15:31:01

+0

另外檢查了這一點:http://msdn.microsoft.com/en-us/library/cc441928.aspx – Ray 2012-01-06 15:33:39

+0

添加更多的上下文,你使用什麼LINQ,任何數據庫? – oleksii 2012-01-06 15:33:57

回答

0

它可能會更好地做到這一點與for循環得到再利用LINQ

var result = new List<subject>(); 
for(i = 0; i < 10; i++) 
{ 
    randomnumber = GenerateNewRandomNumber(); 
    result.Add(sc.Subjects.Where(r => r.SubName == sub && r.Level == lev).Skip(randomnumber).take(1).First; 

} 
+0

您如何知道可以跳過的最大值? – 2012-01-06 16:01:23

+0

嘿,你的方法似乎是相當不錯的,但我得到以下錯誤: 'System.Collections.Generic.List .Add(Genre)'的最佳重載方法匹配有一些無效的參數 – 2012-01-06 17:15:37

+0

Take(1 )添加一個'第一個',現在它正在返回一個IEnumberable 而不是一個流派 – msarchet 2012-01-06 19:07:45

0

請嘗試以下項目:

private static Random Generator = new Random(); 
... 
var result = sc.Subjects.Where(s => s.SubName == sub && s.Level == lev).OrderBy(s => Generator.Next()).Take(10); 
7

我在我的一個網站使用,從表中顯示隨機廣告。它EF4.0,但LINQ2SQL可能是相同或相似的:

myAds = (from q in db.Ads select q).OrderBy(x => Guid.NewGuid()).Take(10).ToList(); 
+0

完美無瑕!謝謝! – 2013-03-29 07:21:58

+1

它不適用於linqtosql。 – onder 2013-10-28 13:52:50