Asp.net
Linq Orderby 隨機 ThreadSafe 用於 ASP.NET
我正在使用帶有 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 的結果排序。
優點:-
- 高效:SQL 處理排序,無需獲取整個表
- 可重複:(適合測試)- 可以使用相同的隨機種子生成相同的隨機順序
- 適用於大多數(全部?)實體框架支持的數據庫
這是我的家庭自動化系統用來隨機播放列表的方法。它每天挑選一個新種子,在白天提供一致的順序(允許輕鬆暫停/恢復功能),但每天都會重新審視每個播放列表。