IDataReader 没有 Select 的定义

use*_*961 0 c#

我最近将我的 VS2015 项目升级到了 VS2017。我将 .NET 框架升级到 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;
    }
Run Code Online (Sandbox Code Playgroud)

错误是

“IDataReader”不包含“Select”的定义,并且找不到接受“IDataReader”类型的第一个参数的可访问扩展方法“Select”(您是否缺少 using 指令或程序集引用?)

我确实在使用中使用了 System.Linq,在参考中使用了 System.Core。请问有什么想法吗?

Vla*_*lka 5

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);
    }
}
Run Code Online (Sandbox Code Playgroud)