データリーダーを返すメソッドがあります。通常は、データ リーダーを using でラップして、反復処理後に適切に破棄されるようにします。問題は、Linq を使用してデータ リーダーを使用することを選択したことです。これは、遅延実行によりリーダーが早期に破棄されることを意味します。コンテンツの完全なコレクションを構築することなく、Linq を使用してデータ リーダーを消費および破棄する適切なパターンはありますか?
using (System.Data.SqlClient.SqlDataReader reader = CallStoredProcedure())
{
return reader.Cast<System.Data.Common.DbDataRecord>().Select(rec => new ObjectModel.CollectorSummaryItem()
{
CollectorID = (int)rec[0],
Name = rec.IsDBNull(1) ? null : rec.GetString(1),
Information = rec.IsDBNull(2) ? null : rec.GetString(2)
});
}