LINQ - 返回随机值不起作用
本文关键字:不起作用 随机 返回 LINQ | 更新日期: 2023-09-27 18:35:26
我的基础设施中有这个类,它假设返回随机图像。它始终返回相同的图像。我在我的网站上的不同位置使用了完全相同的代码,它可以工作。有什么想法吗?
这个问题是我从哪里获得获取随机值的信息。我不明白为什么它在一个地方工作而不是另一个地方......
背景.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="" />
Guid 不是随机数。 它们通常是顺序的,因为它们具有时间戳组件,这意味着您将始终从该代码中获取第一个或最后一个图像。 您应该使用 Random
类(如果它真的很重要,则使用加密随机数生成器之一)获取一个介于 0 和您拥有的图像数量之间的随机数,然后获取第 n 个图像(其中 n 是随机数)。 如果在短时间内多次调用此函数,则应确保在对该方法的所有调用之间使用相同的Random
实例。 (这意味着创建一个您可以重复使用的私有静态随机实例。
好吧,我会说一次你有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?
}
}
它应该改变。
有什么
理由不能像下面这样使用System.Random
类吗?
var random = new Random();
var index = random.Next(0, count); // use the list count here
var randomImage = _db.Images[index]; // or equivalent