Thanks for the tip. I posted a similar method here in October. It used DataTable.CreateDataReader() to return an IDataReader public static class IListExtensions { public static IDataReader ToDatataReader(this IList dataList) { var dataTable = new DataTable(); PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T)); foreach (PropertyDescriptor property in properties) { var type = Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType; dataTable.Columns.Add(property.Name, type); } var propertyValues = new object[properties.Count]; foreach (T item in dataList) { for (int i = 0; i < propertyValues.Length; i++) { propertyValues[i] = properties[i].GetValue(item); } dataTable.Rows.Add(propertyValues); } return dataTable.CreateDataReader(); } }