Take()强制LINQ枚举结果IEnumerable吗?

BTE*_*BTE 2 c# linq-to-sql

我有以下两个问题

List<User> allUsers= dbContext.Users.ToList();
List<User> topTenUsers = dbContext.Users.Take(10).ToList();
Run Code Online (Sandbox Code Playgroud)

它们是实例类的属性,它们都加载数据,如下面的代码:

using (var dbContext = new fooDataObjects.DataContext()) { 
    //...they are loaded here
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试从allUsersi 访问结果集合时,会得到一个异常,上面写着"无法访问已处置的对象".但是我可以从中访问结果集合topTenUsers.

Take()强制LINQ枚举我可以从第二个集合中获得结果的结果元素吗?

Mat*_*son 7

Take() 它本身不会导致基础序列的枚举.

但是,.ToList()你有那里导致它被枚举(虽然在你的示例中只有前10个元素).

我认为你在不使用的情况下获得例外的原因Take(10)是因为前10个之后的一个对象已被处理,但前10个中没有一个被处置掉.

因此,只有完整列表包含已处置的对象; 部分清单很好.