.Take
クエリで指定された数の結果を返します。同じクエリであれば、多くの場合、同じ結果が返されます。これを解決するには、 と を組み合わせて使用し、.Skip
毎回pingおよびing する.Take
番号を変更します。Skip
Take
private int counter = 0;
public IQueryable<Person> GetPersonBetweenDates(DateTime start, DateTime end)
{
var results = dbcontext.Persons.Where(x => x.RegisterDate >= start && x.RegisterDate <= end).Skip(counter).Take(20);
counter += 20;
return results;
}
レコードがなくなった後でも、これを継続的に呼び出すことができることに注意してください。
または、クエリをキャッシュすることもできます (使用するたびにクラスを再インスタンス化しない場合)。
private IQueryable<Person> qry = dbcontext.Persons.Where(x => x.RegisterDate >= start && x.RegisterDate <= end);
public IQueryable<Person> GetPersonBetweenDates(DateTime start, DateTime end)
{
qry = qry.Skip(20);
return qry.Take(20);
}
それにもかかわらず、これらのスニペットの両方に他の問題がある可能性があります - tvanfosson のコメントと回答を参照してください。