IDataReader没有选择的定义

时间:2018-09-03 07:49:25

标签: c#

我最近将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'不包含'Select'的定义,找不到可以接受的扩展方法'Select'接受类型为'IDataReader'的第一个参数(您是否缺少using指令或程序集引用?)

我确实在使用System.Linq,在References中使用System.Core。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

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);
    }
}