我有以下两个问题
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() 是否强制 LINQ 枚举我可以从第二个集合中获得结果的结果元素?
最佳答案
Take()
本身不会导致底层序列的枚举。
但是,您那里的 .ToList()
将导致它被枚举(尽管在您的示例案例中只有前 10 个元素)。
我认为在不使用 Take(10)
的情况下出现异常的原因是前 10 个之后的对象之一已被处置,但没有一个前 10 个已处理。
因此只有完整列表包含已处置对象;部分列表很好。
关于c# - Take() 是否强制 LINQ 枚举结果 IEnumerable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17210807/