C# IDataReader没有Select的定义
我最近将我的VS2015项目升级为VS2017。我将.NET framework升级到4.7.2,但现在我遇到了以下问题C# IDataReader没有Select的定义,c#,C#,我最近将我的VS2015项目升级为VS2017。我将.NET framework升级到4.7.2,但现在我遇到了以下问题 using (IDataReader rd = ExecuteCmdAndGetReader(myssqlstring)) { MyList = rd.Select<myObject>(myObject.Load).ToList(); } internal SqlDataReader ExecuteCmdAndGe
using (IDataReader rd = ExecuteCmdAndGetReader(myssqlstring))
{
MyList = rd.Select<myObject>(myObject.Load).ToList();
}
internal SqlDataReader ExecuteCmdAndGetReader(string sql)
{
SqlCommand cmd;
cmd = new SqlCommand(sql, connection);
SqlDataReader reader = cmd.ExecuteReader();
return reader;
}
使用(IDataReader rd=ExecuteCmdAndGetReader(mySqlString))
{
MyList=rd.Select(myObject.Load).ToList();
}
内部SqlDataReader ExecuteCmdAndGetReader(字符串sql)
{
SqlCommand命令cmd;
cmd=新的SqlCommand(sql,连接);
SqlDataReader=cmd.ExecuteReader();
返回读取器;
}
错误是
“IDataReader”不包含“Select”的定义,并且找不到接受“IDataReader”类型的第一个参数的可访问扩展方法“Select”(是否缺少using指令或程序集引用?)
我有System.Linq的用法和System.Core的参考资料。有什么想法吗?IDataReader没有实现
IEnumerable
接口,因此没有Select
等LINQ方法。我建议您可以实现自己的Select
扩展方法:
public static IEnumerable<TResult> Select<TResult>(this IDataReader reader,
Func<IDataReader, TResult> selector)
{
while (reader.Read())
{
yield return selector(reader);
}
}
public static IEnumerable Select(此IDataReader读取器,
Func选择器)
{
while(reader.Read())
{
收益率返回选择器(读卡器);
}
}
IDataReader没有实现IEnumerable
接口,因此没有Select
等LINQ方法。我建议您可以实现自己的Select
扩展方法:
public static IEnumerable<TResult> Select<TResult>(this IDataReader reader,
Func<IDataReader, TResult> selector)
{
while (reader.Read())
{
yield return selector(reader);
}
}
public static IEnumerable Select(此IDataReader读取器,
Func选择器)
{
while(reader.Read())
{
收益率返回选择器(读卡器);
}
}
您是否有对Microsoft.VisualStudio.Data.dll的引用?您可以根据建议尝试使用IDataReader
为Select
创建扩展方法。当然,当前的LINQSelect
没有对IDataReader
的本机支持IDataReader
没有Select
功能。这是您为项目创建的一个扩展函数,但您没有正确的使用方法来引入它吗?您的问题似乎暗示,在以前版本的Net中,此代码是有效的。是这样吗?等一下,@user2837961你说它以前工作过。你需要找出为什么它不再有效,而不仅仅是“修复它”。您以前的实现中可能包含一些边缘案例代码,以使您的项目正常工作。在从互联网上随机删除代码之前,您需要做更多的尽职调查!您是否有对Microsoft.VisualStudio.Data.dll的引用?您可以尝试按照建议使用IDataReader
为Select
创建扩展方法。当然,当前的LINQSelect
没有对IDataReader
的本机支持IDataReader
没有Select
功能。这是您为项目创建的一个扩展函数,但您没有正确的使用方法来引入它吗?您的问题似乎暗示,在以前版本的Net中,此代码是有效的。是这样吗?等一下,@user2837961你说它以前工作过。你需要找出为什么它不再有效,而不仅仅是“修复它”。您以前的实现中可能包含一些边缘案例代码,以使您的项目正常工作。在从互联网上随机删除代码之前,您需要做更多的尽职调查!这并不能解释为什么升级.NET Framework会导致代码中断。@Stijn agree,它不能确保连接对象是显式打开的,不像DataAdapter,DataReader不会这样做。这也不能解释升级.NET Framework会导致代码中断的原因。@Stijn agree,它不能确保连接对象是显式打开的,不像DataAdapter,DataReader不这样做