Направляющие не гарантируются случайными, только уникальными. Не используйте направляющие для случайных данных. В платформе. NET есть определенные c классы, предназначенные для выдачи (псевдо) случайных чисел - 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
.