【发布时间】:2010-12-03 14:58:01
【问题描述】:
我有一个将 DbDataReader 转换为 IEnumerable 对象的扩展方法:
public static IEnumerable<IDataRecord> AsEnumerable(this DbDataReader reader) {
while (reader.Read()) {
yield return reader;
}
}
在我的应用程序中,我像这样查询数据库:
var records = context.Query("select WRKORDNBR from WRKORDER").AsEnumerable();
然后,我枚举每条记录并获取 WRKORDNBR 字段的值:
foreach (var record in records) {
DoSomething((int)record["WRKORDNBR"]);
}
这之前工作得很好。现在,我费心转换 DbDataReader 的原因是因为我需要在 foreach 块之前对记录执行 LINQ 查询。如您所知,DbDataReader 中的记录只能枚举一次(或者我完全遗漏了什么)?这意味着我必须将 AsEnumerable 的结果复制到一个 List 中,以便我可以多次枚举它们。
var temp = records.ToList();
至少,我认为这是我必须做的。但是当我更改我的 foreach 循环以遍历临时集合时,我得到:
InvalidOperationException:行/列不存在数据
我在这里错过了什么?
【问题讨论】:
标签: c# .net linq ienumerable dbdatareader