2013-11-28 51 views
0

我試圖從使用實體框架的Azure SQL數據庫檢索隨機記錄。我知道如果你指定:具有指定Guid的實體框架OrderBy

OrderBy(x => Guid.NewGuid()) 

它會隨機化查詢的結果。

但是,如果我指定一個GUID:

OrderBy(x => guidVariable) 

它不隨機的結果。

,我想這樣做的原因是爲了能夠頁的隨機結果與出隨機正在與每一個電話改變了:

(我用的是返回一個IQueryable一個存儲庫模式)

recordRepository.FetchByIds(Ids)                     
        .OrderBy(x => randomizeKey) 
        .Skip(seedIndex) 
        .Take(pageSize) 
        .ToList(); 

庫代碼:

return Context.Entities.Include("Path") 
         .Include("Path") 
         .Where(x => ids.Contains(x.Id)); 

我是在假設實體框架解釋Guid.NewGuid(),並有SQL Server生成它糾正自己的?有沒有辦法解決這個問題,或者我做錯了什麼?

+0

什麼是'guidVariable'? –

+0

指定的Guid變量 – Chris

+0

是否預定義?如果您每次檢索這些項目時都沒有創建一個新的「Guid」,它總是會根據這個預先存在的「Guid」進行排序。所以它會一直返回相同的序列。關於你的第一個方法的事情是,它會在每次被調用時創建一個新的'Guid',從而每次隨機化它。 –

回答

2

OrderBy(x => randomizeKey)將是相同的每個項目,所以你將在年底

例如獲得相同的序列

new[] {"3", "1", "6"}.OrderBy(x=>5); // results "3", "1", "6" 

如果你需要得到相同的順序嘗試using Random Number Generator具有相同的種子

Random r1 = new Random(4); 

var result1 = new[] {"3", "1", "6"}.OrderBy(x=>r1.Next()); 

Random r2 = new Random(4); 

var result2 = new[] {"3", "1", "6"}.OrderBy(x=>r2.Next()); 

你會得到相同的序列RESULT1和RESULT2

+0

謝謝!我想我假設guid每次比較都強制進行不同的評估,特別是與int進行比較。現在我明白了算法... – Chris