Asp.net

Linq Orderby 隨機 ThreadSafe 用於 ASP.NET

  • September 17, 2014

我正在使用帶有 Sharp 架構的 Asp.net MVC。

我有這個程式碼:

return _repositoryKeyWord.FindAll(x => x.Category.Id == idCAtegory)
               .Take(50).ToList();

我如何隨機訂購?注意:我不想訂購 50 個提取的項目,我想先訂購然後提取 50 個項目。

謝謝

一種有效實現的方法是向數據Shuffle中添加一列,該列填充有隨機整數(在創建每條記錄時)。

訪問表的查詢然後變為……

Random random = new Random();
int seed = random.Next();
result = result.OrderBy(s => (~(s.Shuffle & seed)) & (s.Shuffle | seed)); // ^ seed);

這會在數據庫中執行 XOR 操作,並按 XOR 的結果排序。

優點:-

  1. 高效:SQL 處理排序,無需獲取整個表
  2. 可重複:(適合測試)- 可以使用相同的隨機種子生成相同的隨機順序
  3. 適用於大多數(全部?)實體框架支持的數據庫

這是我的家庭自動化系統用來隨機播放列表的方法。它每天挑選一個新種子,在白天提供一致的順序(允許輕鬆暫停/恢復功能),但每天都會重新審視每個播放列表。

引用自:https://stackoverflow.com/questions/3339192