2

次の2つのクエリがあります

List<User> allUsers= dbContext.Users.ToList();
List<User> topTenUsers = dbContext.Users.Take(10).ToList();

これらはインスタンス クラスのプロパティであり、どちらも以下のコードのようにデータをロードします。

using (var dbContext = new fooDataObjects.DataContext()) { 
    //...they are loaded here
}

問題は、結果コレクションにアクセスしようとすると、allUsers「破棄されたオブジェクトにアクセスできません」という例外が発生することです。しかし、同じ方法で結果コレクションにアクセスできますtopTenUsers

Take() は、2 番目のコレクションから結果を取得できる結果要素を列挙するように LINQ に強制しますか?

4

1 に答える 1

7

Take()単独では、基になるシーケンスの列挙は発生しません。

ただし、.ToList()そこあると列挙されます(サンプルケースでは最初の10要素のみですが)。

使用しない場合に例外が発生する理由はTake(10)、最初の 10 の後のオブジェクトの 1 つが破棄されているためだと思いますが、最初の 10 のオブジェクトはどれも破棄されていません。

したがって、破棄されたオブジェクトを含むのは完全なリストだけです。部分的なリストは問題ありません。

于 2013-06-20T10:27:24.480 に答える