0

結果セットで使用.FromCache()する場合、追加で を呼び出す必要がありますか?それとも、FromCache を使用して実体化されたクエリによって返されたものを返すことができますか?IQueryable.ToList()IEnumerable<>

4

2 に答える 2

2

http://petemontgomery.wordpress.com/2008/08/07/caching-the-results-of-linq-queries/からのコードの派生物を使用していると仮定しています。FromCache実装を見ると、がquery.ToList()既に呼び出されていることがわかります。これは、評価されたリストがキャッシュされることを意味します。そう、

電話する必要はありませんToList()

于 2012-09-11T14:57:53.200 に答える
1

それはあなたがそれで何をしたいかによって完全に異なります。foreach一度やり直すだけなら、そのままにしておくこともできIEnumerableます。すぐに破棄するためだけにリストを作成する必要はありません。

それを複数回繰り返すことを計画している場合は、基になるものに複数回ToListアクセスしないようにするのがおそらく最善です。基になるクエリが時間の経過とともに変更される可能性があり、それらの変更をクエリに反映させたくない場合にも、これを行う必要がありますIQueryableToList

すべての項目を反復する必要がない場合 (最初の項目の後、または途中で停止する可能性があります) の場合、IEnumerableある程度の量のフェッチさえ回避する可能性があるため、そのままにしておくのがおそらく最善です。そもそもデータ。

メソッドがどのように使用されるか分からず、まだ作成されていないコードで使用される単なるヘルパー メソッドである場合は、 を返すことを検討してIEnumerableください。発信者はToList、それをリストに変換するやむを得ない理由がある場合、それを呼び出すことができます。

私にとっては、原則として、IEnumerableやむを得ない理由がない限り、このようなクエリはそのままにしておきListます。

于 2012-09-11T14:57:32.480 に答える