81

Linq / EF4.1を使用してデータベースからいくつかの結果を取得しており、結果を(X)最新の結果に制限したいと思います。ここで、Xはユーザーが設定した番号です。

これを行う方法はありますか?

Listこれが結果セットを制限するのに役立つかどうかとして、私は現在それらを返しています。Xに到達するまでループすることでこれを制限できますが、余分なデータを渡さないと思います。

関連する場合に備えて...SQLServerデータベースから実行されているC#MVC3プロジェクト。

4

3 に答える 3

157

Take関数を使用する

int numberOfrecords=10; // read from user
listOfItems.OrderByDescending(x => x.CreatedDate).Take(numberOfrecords)

listOfItemsはエンティティオブジェクトのリストであり、作成日値を持つフィールドであると想定CreatedDateします(ここでは、降順で最近のアイテムを取得するために順序付けを行うために使用されます)。

Take()関数は、シーケンスの先頭から指定された数の連続する要素を返します。

http://msdn.microsoft.com/en-us/library/bb503062.aspx

于 2012-06-04T15:00:56.497 に答える
36
results = results.OrderByDescending(x=>x.Date).Take(10);

OrderByDescending(...)、日付/時刻プロパティ(または最新のものを取得するために使用するロジック付き)でアイテムを並べ替えTake(...)、最初のx個のアイテム(順序付けのおかげで最初のものが最新のもの)に制限されます。

編集:最初の行から始まらないいくつかの行を返すには、次を使用しますSkip()

results = results.OrderByDescending(x=>x.Date).Skip(50).Take(10);
于 2012-06-04T15:00:59.463 に答える
19

Take()リストに変換する前に、を使用してください。このようにして、EFは作成するクエリを最適化し、必要なデータのみを返すことができます。

于 2012-06-04T15:01:08.027 に答える