订单列表 "randomly" 每天

Order list "randomly" per day

我有一个 IQuerable<Post> 并随机排序我执行以下操作:

IQuerable<Post> posts = getPosts();

posts = posts.OrderBy(x => Guid.NewGuid());

是否可以每天随机排序?

如果我在 4 月 18 日订购,我总是会收到相同的订单。

但是在 4 月 19 日我会收到另一个随机订单。

指南不能保证是随机的,只能是唯一的。不要将 Guids 用于随机数据。 .NET 框架中有特定的 类 旨在提供(伪)随机数 - Random 是最简单的,但如果你想要加密质量,请尝试 System.Security.Cryptography.RandomNumberGenerator.

在你的情况下 Random 是你的朋友。您可以使用从今天日期创建的值作为种子。

试试这个:

var seed = (int)DateTime.Now.Date.Ticks;
var random = new Random(seed);

IQueryable<Post> posts = getPosts();

Post[] sorted =
    posts
        .ToArray()
        .Select(post => new { post, random = random.Next() })
        .OrderBy(x => x.random)
        .Select(x => x.post)
        .ToArray();

当我运行用线束代码时:

IQueryable<Post> getPosts()
{
    return Enumerable.Range(0, 5).Select(x => new Post() { Id = x }).AsQueryable();
}

public class Post
{
    public int Id;  
}

我今天得到 4, 3, 1, 0, 2。明天就是4, 2, 3, 0, 1。周二是 3, 4, 2, 0, 1.