随机排序的IEnumerable每次使用时都会更改顺序,而不是重新排序一次



我正在使用OrderBy和Random((对IEnumerable进行混洗,然后使用ElementAt选择其中一些。

简化版:

var r = new Random(DateTime.Now.Millisecond);
IEnumerable<IPublishedContent> testimonialsShuffled = testimonials.OrderBy(x => r.Next());
var testimonialA = testimonialsShuffled.ElementAt(0);
var testimonialB = testimonialsShuffled.ElementAt(1);
var testimonialC = testimonialsShuffled.ElementAt(2);

事实证明,这并不总是像我预期的那样返回三个不同的元素,因为每次使用testimonialsShuffled时,它似乎都会被重新排序。

var testimonialA = testimonialsShuffled.ElementAt(0);
var testimonialB = testimonialsShuffled.ElementAt(0);
var testimonialC = testimonialsShuffled.ElementAt(0);

类似地,我希望这段代码能产生三个相等的变量,但它们通常不同(因为每次都会更改certificatesShuffled中的第一个元素(。

我的目标是随机对IEnumerable排序一次(这样它的顺序在不同的页面加载时会发生变化,但在一个视图中不会多次(。我做错了什么?

OrderBy会产生一个IEnumerable,每次访问它时都会重新评估(简单地说(
要获得一个固定的结果,您必须"力";将其添加到列表中。

var r = new Random(DateTime.Now.Millisecond);
var testimonialsShuffled = testimonials.OrderBy(x => r.Next()).ToList();
var testimonialA = testimonialsShuffled.ElementAt(0);
var testimonialB = testimonialsShuffled.ElementAt(1);
var testimonialC = testimonialsShuffled.ElementAt(2);

应该做到这一点。

最新更新