0

ASP.NET MVC アプリケーションで LINQ TO SQL を使用していますが、コードは次のようになります。

ISingleResult<proc_get_dataResult> sproc_result = db.proc_get_data();
return sproc_result .AsEnumerable().Cast<proc_get_dataResult>().ToList();

上記のコードは、結果セット全体をリストとして返します。ただし、問題のクエリは大量のデータを返す可能性があるため、作成されるオブジェクトの数を制限したいと考えています。したがって、このメソッドにページ番号を渡します。たとえば、ページ 2 を渡す場合、ページごとの定数が 25 に設定されている場合は、エントリ 26 ~ 50 のみを返します。

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

前もって感謝します

4

2 に答える 2

1

まあ、効率は疑わしいですが、クエリを実行してすべての結果を返す必要があるようです。そこから、LINQ で Skip() および Take() 拡張メソッドを使用して、必要なものを取得できます。

 return sproc_result.AsEnumerable().Cast<proc_get_dataResult>().ToList().OrderBy(r=>r.WhateverField).Skip(25).Take(25);

編集: Skip または Take を行う前に OrderBy を行う必要があることを忘れていました。順序付けられたフィールドが何であれ、置き換えるだけです。

于 2012-12-05T17:58:48.677 に答える
0

このスレッドを参照してください。

LINQ のコンテキストで質問しているため、これは正確な複製ではありません。そのスレッドでページング メソッドの 1 つを使用するには、sproc を変更する必要があります。CTE /Row_Number() over...メソッドは、結果セットにインデックスを割り当てる非常に効率的な方法であり、結果セットをソート/ページングするために使用できます。

于 2012-12-05T17:54:21.987 に答える