user2837961
user2837961

Reputation: 1555

IDataReader does not have definition for Select

I recently upgraded my VS2015 project to VS2017. I upgraded the .NET framework to 4.7.2 but now I get the following problem

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

The error is

'IDataReader' does not contain a definition for 'Select' and no accessible extension method 'Select' accepting a first argument of type 'IDataReader' could be found (are you missing a using directive or an assembly reference?)

I do have System.Linq in uses and System.Core in References. Any ideas please?

Upvotes: 0

Views: 1788

Answers (1)

Vladi Pavelka
Vladi Pavelka

Reputation: 926

IDataReader doesn't implement the IEnumerable interface, hence no Select etc. LINQ methods. I suggest you could implement your own Select extension method:

public static IEnumerable<TResult> Select<TResult>(this IDataReader reader,
                                       Func<IDataReader, TResult> selector)
{
    while (reader.Read())
    {
        yield return selector(reader);
    }
}

Upvotes: 5

Related Questions