无法将类型为“System.Data.Common.DataRecordInternal”的对象转换为类型“System.Data.IDataReader”

6
尝试创建this linq语句时,我遇到了以下错误:

无法将类型为“System.Data.Common.DataRecordInternal”的对象转换为类型“System.Data.IDataReader”

这是我按照@SLaks 有前途的答案所做的。
List<TypeData> = reader.Cast<IDataReader>()
   .Select(dr => new TypeData { Type = (string)dr["type"] })                
   .ToList();

1
дЅ иѓЅеЏ‘еёѓдёЂдё‹дЅ зљ„TypeDataз±»зљ„д»Јз Ѓз»“жћ„еђ—пјџ - user153923
此外,看起来您正在设置 TypeData obj = xxx.ToList() - user153923
1个回答

9
请尝试使用reader.Cast<DbDataRecord>或者reader.Cast<IDataRecord>代替:
IEnumerable<TypeData> typeData = reader.Cast<IDataRecord>()
   .Select(dr => new TypeData { Type = (string)dr["type"] });

IDataRecord 接口

DataReader 提供每行中列的值的访问方法,是 .NET Framework 数据提供程序实现的关系型数据库访问方法。


他是否还需要某种“SingleOrDefault”而不是“ToList”? - user153923
这个有效!谢谢...再等两分钟我就能给你点赞了。 - capdragon
@jp2code:是的,我已经移除了 ToList 并改用 IEnumerable<TypedData> - Tim Schmelter
@TimSchmelter 为什么?IEnumerableToList更可取吗? - capdragon
1
@capdragon:这取决于你想用它做什么。 DataReader从DBMS流式传输记录。这意味着您不需要等待1百万条记录加载到内存中,即可从第一条记录开始处理。 IEnumerable 也可以流式处理。因此,您可以编写 var first10=typeData.Take(10);。如果您调用 ToList,则会将所有内容加载到内存中。 - Tim Schmelter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接