LINQ Skip & Takeを使用します。
return query.Skip(HOW MUCH TO SKIP -AT THE BEGINNING WILL BE ZERO-)
.Take(HOW MUCH TO TAKE -THE NUMBER OF YOUR PAGING SIZE-).ToList();
ループ内で実行したい場合は、次のようにすることができます。
int pagingIncrement = 1000;
for (int i = 0; i <= 150 000; i=i+pagingIncrement)
{
var query = your actual LINQ query.
var results = query.Skip(i).Take(pagingIncrement);
UpdatePartialResults(results);
}
注: これらの行を更新している間は、実際の LINQ クエリ内で ORDER BY の基準を更新しないことが重要です。そうしないと、(並べ替えのために) 同じ結果を何度も更新することになります。
他のアイデアは、IEnumerable イテレータを a などの以前に与えられたいくつかのアイデアで拡張し、Skip(counter).Take(pagingSize
結果を生成することです (非同期的に処理するため)。