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

标签 c# linq-to-sql

我有以下两个问题

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/

相关文章:

database - LINQ 检索语句未返回最新更新的结果

asp.net - Linq-to-SQL 数据上下文未生成对象

c# - 将 nvarchar 转换为数据类型 int 时出错

c# - 创建一个正则表达式来检查强密码

c# - 需要建议 : Switching from Linq to SQL to Entity Framework

c# - 如何通过 LINQ 从 SQL 中提取 RANDOM 和 UNIQUE 记录

linq-to-sql - F# SQL 类型提供程序 - 为什么不提供所有存储过程?

c# - 如何使用反射创建 Action<T>,其中 T 是发现的通用类型

c# - 即将到期的并发字典

c# - 从数据访问层提取业务逻辑