1

ランダムな画像を返すことを想定したこのクラスがインフラストラクチャにあります。常に同じ画像を返します。ウェブサイトの別の場所でまったく同じコードを使用していますが、機能します。何か案は?

この質問は、ランダムな値を取得するための情報を入手した場所です。なぜそれが1つの場所で機能し、別の場所では機能しないのかわかりません...

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="" />
4

3 に答える 3

2

GUIDは乱数ではありません。タイムスタンプコンポーネントがあるため、多くの場合、シーケンシャルです。つまり、そのコードから常に最初または最後の画像を取得します。クラス(または、本当に重要な場合は暗号化乱数ジェネレーターの1つ)を使用してRandom、0から所有する画像の数までの乱数を取得し、n番目の画像(nは乱数)を取得する必要があります。この関数を短時間に複数回呼び出す場合は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 に答える