Linq / EF4.1を使用してデータベースからいくつかの結果を取得しており、結果を(X)最新の結果に制限したいと思います。ここで、Xはユーザーが設定した番号です。
これを行う方法はありますか?
List
これが結果セットを制限するのに役立つかどうかとして、私は現在それらを返しています。Xに到達するまでループすることでこれを制限できますが、余分なデータを渡さないと思います。
関連する場合に備えて...SQLServerデータベースから実行されているC#MVC3プロジェクト。
Linq / EF4.1を使用してデータベースからいくつかの結果を取得しており、結果を(X)最新の結果に制限したいと思います。ここで、Xはユーザーが設定した番号です。
これを行う方法はありますか?
List
これが結果セットを制限するのに役立つかどうかとして、私は現在それらを返しています。Xに到達するまでループすることでこれを制限できますが、余分なデータを渡さないと思います。
関連する場合に備えて...SQLServerデータベースから実行されているC#MVC3プロジェクト。
Take
関数を使用する
int numberOfrecords=10; // read from user
listOfItems.OrderByDescending(x => x.CreatedDate).Take(numberOfrecords)
listOfItems
はエンティティオブジェクトのリストであり、作成日値を持つフィールドであると想定CreatedDate
します(ここでは、降順で最近のアイテムを取得するために順序付けを行うために使用されます)。
Take()関数は、シーケンスの先頭から指定された数の連続する要素を返します。
results = results.OrderByDescending(x=>x.Date).Take(10);
はOrderByDescending(...)
、日付/時刻プロパティ(または最新のものを取得するために使用するロジック付き)でアイテムを並べ替えTake(...)
、最初のx個のアイテム(順序付けのおかげで最初のものが最新のもの)に制限されます。
編集:最初の行から始まらないいくつかの行を返すには、次を使用しますSkip()
:
results = results.OrderByDescending(x=>x.Date).Skip(50).Take(10);
Take()
リストに変換する前に、を使用してください。このようにして、EFは作成するクエリを最適化し、必要なデータのみを返すことができます。