2012-05-22 79 views
0

我想知道選擇使用LINQ 2 SQL表隨機行的最佳方式,而我在尋找,我發現這兩個問題:選擇隨機行中使用LINQ 2 SQL

Random row from Linq to Sql

Get a random row with LINQtoSQL

,但我不認爲這是最好的&最快的方式,使用NEWID()根據MSDN是一個壞的方式來選擇隨機本文就行:

http://msdn.microsoft.com/en-us/library/cc441928.aspx

他們提出了另一個查詢比NEWID方法更快:

SELECT * FROM Table1 
    WHERE (ABS(CAST(
    (BINARY_CHECKSUM(*) * 
    RAND()) as int)) % 100) < 10 

此查詢背後的基本想法是,他們要生成表中的每一行0到99之間的隨機數,然後選擇所有的行,其隨機數小於指定百分比

的價值,但是當我試圖做到這一點使用LINQ我找不到一個相當於BINARY_CHECKSUM

,這樣是他們的等價物BIN ARY_CHECKSUM在LINQ中?

是否真的是隨機選擇行的最快方式? (如果你能幫助我把它轉換爲LINQ代碼這將是對我來說更容易)

感謝您的幫助

回答

-1

喜歡的東西,將工作?

private static readonly Random _randomInstance = new Random(); 
private readonly Func<int, bool> ChanceSuccess = new Func<float, bool>(f => 
    _randomInstance.Next(0, 101) <= f); 

var result = from row in Table1 
      where ChanceSuccess(10) 
      select row; 
+0

您的查詢錯過了幾位,至少在末尾選擇了'select'和一個分號。 – Joey

+0

沒有辦法可以翻譯成SQL – erikkallen

+0

@erikkallen他們的問題是關於linq-to-sql和EF,不是嗎? (undownvote男子)。 – AgentFire