Вы можете создать метод расширения для этого (см. Предостережения ниже) :
public static class DataReaderExtension
{
public static IEnumerable<Object[]> AsEnumerable(this System.Data.IDataReader source)
{
if (source == null)
throw new ArgumentNullException("source");
while (source.Read())
{
Object[] row = new Object[source.FieldCount];
source.GetValues(row);
yield return row;
}
}
}
Найдено здесь: http://www.thinqlinq.com/default/Consuming-a-DataReader-with-LINQ.aspx
Как отмечает @LukeH, обратите внимание, что поскольку IDataReader поддерживает чтение только один раз, вперёд, вы сможете запросить перечисляемый только один раз. (Чтобы обойти это, вы можете вызвать ToList / ToArray, а затем запросить это).
Обратите внимание, что SqlDataReader
уже подразумевает IEnumerable, поэтому вам не нужно делать это в приведенном вами примере.
Кроме того, помните, что, вероятно, лучше выполнить любую фильтрацию / агрегирование на сервере (например, через LINQ to SQL )