C# IDataReader没有Select的定义

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

我最近将我的VS2015项目升级为VS2017。我将.NET framework升级到4.7.2,但现在我遇到了以下问题

    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
创建扩展方法。当然,当前的LINQ
Select
没有对
IDataReader
的本机支持
IDataReader
没有
Select
功能。这是您为项目创建的一个扩展函数,但您没有正确的使用方法来引入它吗?您的问题似乎暗示,在以前版本的Net中,此代码是有效的。是这样吗?等一下,@user2837961你说它以前工作过。你需要找出为什么它不再有效,而不仅仅是“修复它”。您以前的实现中可能包含一些边缘案例代码,以使您的项目正常工作。在从互联网上随机删除代码之前,您需要做更多的尽职调查!您是否有对Microsoft.VisualStudio.Data.dll的引用?您可以尝试按照建议使用
IDataReader
Select
创建扩展方法。当然,当前的LINQ
Select
没有对
IDataReader
的本机支持
IDataReader
没有
Select
功能。这是您为项目创建的一个扩展函数,但您没有正确的使用方法来引入它吗?您的问题似乎暗示,在以前版本的Net中,此代码是有效的。是这样吗?等一下,@user2837961你说它以前工作过。你需要找出为什么它不再有效,而不仅仅是“修复它”。您以前的实现中可能包含一些边缘案例代码,以使您的项目正常工作。在从互联网上随机删除代码之前,您需要做更多的尽职调查!这并不能解释为什么升级.NET Framework会导致代码中断。@Stijn agree,它不能确保连接对象是显式打开的,不像DataAdapter,DataReader不会这样做。这也不能解释升级.NET Framework会导致代码中断的原因。@Stijn agree,它不能确保连接对象是显式打开的,不像DataAdapter,DataReader不这样做