Linq Orderby随机ThreadSafe用于ASP.NET

Mar*_*ghi 12 linq asp.net asp.net-mvc s#arp-architecture

我正在使用Asp.net MVC和Sharp Architecture.

我有这个代码:

return _repositoryKeyWord.FindAll(x => x.Category.Id == idCAtegory)
                .Take(50).ToList();
Run Code Online (Sandbox Code Playgroud)

我如何随机订购?注意:我不想订购50个提取的物品,我想先订购,然后提取50个物品.

THKS

Ian*_*cer 32

实现高效实现的一种方法是在数据Shuffle中添加一个用随机int填充的列(当创建每个记录时).

然后访问表的查询变为......

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

这在数据库中执行XOR操作,并按XOR的结果进行排序.

好处:-

  1. 高效:SQL处理排序,无需获取整个表
  2. 可重复:(适合测试) - 可以使用相同的随机种子生成相同的随机顺序
  3. 适用于大多数(所有?)Entity Framework支持的数据库

这是我的家庭自动化系统用于随机化播放列表的方法.它每天都会选择一个新的种子,在白天提供一致的顺序(允许轻松的暂停/恢复功能),但每个新的一天都要重新审视每个播放列表.

  • 这个解决方案让我去了ooooo和ahhhh. (5认同)
  • 这太棒了!我也用过PK。表现非常出色 (2认同)