2016-04-22 2 views
0

ページネーションの作成方法はわかっていますが、ページングの基礎となるクエリは次回のページング結果が必要なときには常に更新されているため、だから私はクエリの効率的な結果を効率的に1つずつ繰り返すための簡単なソリューションを探しています。下の例を見てください。大きなクエリを反復する方法

var urls = db.Websites.Select(s => s.Website) 
      .Except(db.OldWebsites.Select(s => s.Website)); 

foreach (var url in urls) 
{ 
    //process items 
} 

解決策が本当に効率的であるかどうかを知りたいのは、反復全体の結果であるかどうかです。私は、ソリューションがすべての結果をメモリにロードせずに行を1つずつロードしていることを確かめていません。

誰かがこれを確認したり、より良い解決策を提案できますか?

答えて

0

はいエンティティフレームワークのストリーミングは、デフォルトとしてバッファリングする代わりに実行されます。警告を与え、以下のようAsStreamingメソッドを呼び出す:「クエリが今ExecutionStrategyが使用されている再試行しない限り、デフォルトでストリーミングしている

foreach (var item in db.Websites.AsStreaming()) { } 

だけでDbContextは、反復結果の参照を保持していないことを気をつけにする必要がある匿名型またはプリミティブ。結果が既に追跡されていないので、AsNoTracking for Entityの結果を呼び出す必要があります

db.Websites.AsNoTracking() 
関連する問題