gpt4 book ai didi

c# - Take() 是否强制 LINQ 枚举结果 IEnumerable?

转载 作者:行者123 更新时间:2023-11-30 20:02:07 25 4
gpt4 key购买 nike

我有以下两个问题

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/

25 4 0