C#でASP.Net MVC3を使用するコントローラでランダムな単一レコードを選択
データベースから単一のランダムレコードを選択する方法を教えてください。
この
は、私がチェックすることはできませんので、モバイルデバイス上で今CJAd cjad = db.CJAds.Single(c => c.category_id == 1 && c.ad_active == true);
C#でASP.Net MVC3を使用するコントローラでランダムな単一レコードを選択
データベースから単一のランダムレコードを選択する方法を教えてください。
この
は、私がチェックすることはできませんので、モバイルデバイス上で今CJAd cjad = db.CJAds.Single(c => c.category_id == 1 && c.ad_active == true);
var selection = db.CJAds.Where(c => c.category_id == 1 && c.ad_active);
CJAd cjad = selection
.OrderBy(c => c.id)
.Skip(new Random().Next(selection.Count()))
.First();
これはうまく見えますが、Visual Studioではエラーではありませんが、このエラーがスローされます。System.NotSupportedException:メソッド 'Skip'は、LINQ to Entitiesのソート済み入力に対してのみサポートされています。メソッド 'OrderBy'はメソッド 'Skip'の前に呼び出さなければなりません。 –
あなたは使用しているフレームワークについて述べていません。しかし、この場合、スキップの前にいくつかのソート(OrderBy())を追加してください。私はあなたのテーブルを知らないので、私はここであなたを助けることができます。 – Tim
イムを持っているコードです。これはうまくいくはずです。
CJAd cjad = db.CJADs.Where(c => c.category_id == 1 && c.ad_active).OrderBy(c => Guid.NewGuid()).FirstOrDefault();
これはデータベース上で評価することはできず、完全なテーブルの読み込みとメモリの順序付けにつながると思います。 – Tim
は、あなたがする必要はありませんので、?.. –
、あなたが今持っているコードを好き '&& c.ad_active == true'には、単に' && c.ad_active'で十分です。 –