A SqlDataReader
- это и IDataReader
(он реализует интерфейс), так что вам вообще не нужно его преобразовывать.Везде, где ваш код ожидает IDataReader
, вы можете использовать реализацию Sql.
// Given a method with this signature
public void ProcessData(IDataReader reader);
// You can do this
SqlDataReader sqlReader = command.ExecuteReader();
ProcessData(sqlReader);
Что касается List<T>
и IDataReader
: помимо перечисления они делают совершенно разные вещи.Наиболее заметным отличием является то, что устройства чтения данных предоставляют доступ к столбчатым данным (главным образом потому, что он реализует интерфейс IDataRecord
), что не имеет смысла для большинства списков.
Вы могли бы внедрить адаптер, обеспечивающий доступ к List<T>
через интерфейс считывателя данных, но это было бы плохо подходит и требовало значительного объема работы.