linqdatasource +エンティティフレームワークのiqueryableクエリを使用してリストビューを作成しました。
クエリは、このようなテイク(T-SQLの一番上)を使用しています:
context.Categories().OrderBy(c=>c.Name).Take(20);
をだから、私が名前順たい20回の記録をもたらします。
ここでは、20個のレコードをランダムな順序で表示したいと考えています。何が最良のアプローチは、これを実現する?
linqdatasource +エンティティフレームワークのiqueryableクエリを使用してリストビューを作成しました。
クエリは、このようなテイク(T-SQLの一番上)を使用しています:
context.Categories().OrderBy(c=>c.Name).Take(20);
をだから、私が名前順たい20回の記録をもたらします。
ここでは、20個のレコードをランダムな順序で表示したいと考えています。何が最良のアプローチは、これを実現する?
をこれは、その後の呼び出し、最初の名前で注文し、拡張メソッドを使用して非常に単純であることが判明しました(T-SQLのトップを)取り、後で
context.Categories().OrderByName().Take(20).OrderByRandom();
public static IQueryable<Category> OrderByName(this IQueryable<Category> query)
{
return from c in query
orderby c.Name
select c;
}
public static IQueryable<T> OrderByRandom<T>(this IQueryable<T> query)
{
return (from q in query
orderby Guid.NewGuid()
select q);
}
は、私がこの記事では答えは何が必要であると考えている:
Linq to Entities, random order
EDIT:
最初にあなたのトップ20レコードを取得します。そして、あなたはすでにフェッチきた上位20品目で、全くデータベースを含まない、C#でそれらすべてをランダム:
var yourRecords = context.Categories().OrderBy(c=>c.Name).Take(20); // I believe .Take() triggers the actual database call
yourRecords = yourRecords.OrderBy(a => Guid.NewGuid()); // then randomize the items now that they are in C# memory
こんにちはをランダム化する、あなたの答えに感謝しかし、それは全体のデータベーステーブルから私の20のランダムなレコードを取得しますし、私は20のトップを取得したいので、私は必要なものではありませんデータベースからレコードを取得し、ランダムな順序で20レコードを表示する – Milox
私の編集を参照してください... –
それは良いと論理的な答えです、それはちょうど私のlinqdatasouを残すシナリオから抜け出す。あなたがこれをTSQLで作ったのと同じように、 select *から (カテゴリから上位に*を選択してください)サブクエリ order by NewGuid – Milox
これは拡張メソッドなし純粋なラムダ式を使用して動作することがありますが、私はそれをテストしていません – Milox
クール、あなたはそれが働いてうれしい。 try/catchが必要ですか?彼らがすべて例外をスローした場合、それがなければデフォルトの動作ではないでしょうか? –