我的基础架构中有这个类,它假设返回随机图像。它总是返回相同的图像。我在我的网站上的不同位置使用完全相同的代码,它的工作原理。有什么想法吗?
This问题是我获取随机值的信息。我不明白为什么它在一个地方而不是另一个地方工作但是......
Background.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="" />
答案 0 :(得分:2)
Guids are not random numbers。它们通常是顺序的,因为它们具有时间戳组件,这意味着您将始终从该代码获取第一个或最后一个图像。您应该使用Random
类(或其中一个加密随机数生成器,如果它真的很重要)来获得0和您拥有的图像数之间的随机数,然后取第n个图像(其中n是随机数)。如果您在短时间内多次调用此函数,则应确保在方法的所有调用之间使用相同的Random
实例。 (这意味着制作一个可以重复使用的私有静态随机实例。)
答案 1 :(得分: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?
}
}
它应该改变。
答案 2 :(得分: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