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() 是否强制 LINQ 枚举我可以从第二个集合中获取结果的结果元素?

4

1 回答 1

7

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

但是,.ToList()您在那里导致它被枚举(尽管在您的示例案例中只有前 10 个元素)。

我认为在不使用的情况下出现异常的原因Take(10)是因为前 10 个对象之后的一个对象已被处置,但前 10 个对象都没有被处置。

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

于 2013-06-20T10:27:24.480 回答