結果セットで使用.FromCache()
する場合、追加で を呼び出す必要がありますか?それとも、FromCache を使用して実体化されたクエリによって返されたものを返すことができますか?IQueryable
.ToList()
IEnumerable<>
2 に答える
http://petemontgomery.wordpress.com/2008/08/07/caching-the-results-of-linq-queries/からのコードの派生物を使用していると仮定しています。FromCache
実装を見ると、がquery.ToList()
既に呼び出されていることがわかります。これは、評価されたリストがキャッシュされることを意味します。そう、
電話する必要はありませんToList()
それはあなたがそれで何をしたいかによって完全に異なります。foreach
一度やり直すだけなら、そのままにしておくこともできIEnumerable
ます。すぐに破棄するためだけにリストを作成する必要はありません。
それを複数回繰り返すことを計画している場合は、基になるものに複数回ToList
アクセスしないようにするのがおそらく最善です。基になるクエリが時間の経過とともに変更される可能性があり、それらの変更をクエリに反映させたくない場合にも、これを行う必要がありますIQueryable
。ToList
すべての項目を反復する必要がない場合 (最初の項目の後、または途中で停止する可能性があります) の場合、IEnumerable
ある程度の量のフェッチさえ回避する可能性があるため、そのままにしておくのがおそらく最善です。そもそもデータ。
メソッドがどのように使用されるか分からず、まだ作成されていないコードで使用される単なるヘルパー メソッドである場合は、 を返すことを検討してIEnumerable
ください。発信者はToList
、それをリストに変換するやむを得ない理由がある場合、それを呼び出すことができます。
私にとっては、原則として、IEnumerable
やむを得ない理由がない限り、このようなクエリはそのままにしておきList
ます。