web-dev-qa-db-ja.com

Linqからリストで返される結果の数を制限する

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

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

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

念のため、SQL Serverデータベースから実行しているC#MVC3プロジェクト。

58
Jared

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

107
Shyju
_results = results.OrderByDescending(x=>x.Date).Take(10);
_

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

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

_results = results.OrderByDescending(x=>x.Date).Skip(50).Take(10);
_
25
Mr. TA

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

14
RedFilter