1

我的基础设施中有这个类,假设返回随机图像。它总是返回相同的图像。我在我的网站上的不同位置使用了完全相同的代码,并且可以正常工作。有任何想法吗?

这个问题是我获得获取随机值的信息的地方。我不明白为什么它适用于一个地方而不是另一个地方......

背景.cs

public static class Background
{
    public static string Get()
    {
        photoBlogModelDataContext _db = new photoBlogModelDataContext();
        var image = _db.Images.OrderBy(x => Guid.NewGuid()).FirstOrDefault();
        return image.Small; // Always same value?
    }
}

另一个页面上的相同代码在我循环浏览我的画廊并从中选择随机图像的地方工作

<img src="@Url.Content("~/content/uploads/" + item.Images.OrderBy(x => Guid.NewGuid()).FirstOrDefault().Small)" alt="" />
4

3 回答 3

2

向导不是随机数。它们通常是连续的,因为它们具有时间戳组件,这意味着您将始终从该代码中获取第一张或最后一张图像。您应该使用Random该类(或加密随机数生成器之一,如果它真的很重要)来获取 0 和您拥有的图像数量之间的随机数,然后获取第 n 个图像(其中 n 是随机数)。如果您在短时间内多次调用此函数,则应确保在Random对该方法的所有调用之间使用相同的实例。(这意味着创建一个可以重复使用的私有静态 Random 实例。)

于 2012-05-24T17:18:38.960 回答
0

好吧,我会说一次你有 linq2entities,一次有 linq2object

不确定 OrderBy(Guid.NewGuid()) 是否相同。

如果您尝试枚举

public static class Background
{
    public static string Get()
    {
        photoBlogModelDataContext _db = new photoBlogModelDataContext();
        var image = _db.Images.ToList().OrderBy(x => Guid.NewGuid()).FirstOrDefault();
        return image.Small; // Always same value?
    }
}

它应该改变。

于 2012-05-24T17:18:59.197 回答
0

您是否有理由不能使用System.Random下面的课程?

var random = new Random();
var index = random.Next(0, count); // use the list count here
var randomImage = _db.Images[index]; // or equivalent
于 2012-05-24T17:47:29.750 回答