public static IDataTable FromDataReader( IDataReader reader, int skip = 0, int take = int.MaxValue) { Guard.NotNull(reader, nameof(reader)); if (reader.IsClosed) { throw new ArgumentException("This operation is invalid when the reader is closed.", "reader"); } var columns = new List <IDataColumn>(reader.FieldCount); var data = new List <object[]>(); var schema = reader.GetSchemaTable(); var nameCol = schema.Columns[SchemaTableColumn.ColumnName]; var typeCol = schema.Columns[SchemaTableColumn.DataType]; foreach (DataRow schemaRow in schema.Rows) { var column = new LightweightDataColumn((string)schemaRow[nameCol], (Type)schemaRow[typeCol]); columns.Add(column); } var fieldCount = reader.FieldCount; take = Math.Min(take, int.MaxValue - skip); int i = -1; while (reader.Read()) { i++; if (skip > i) { continue; } if (i >= skip + take) { break; } var values = new object[fieldCount]; reader.GetValues(values); data.Add(values); } var table = new LightweightDataTable(columns, data); return(table); }
public static IDataTable FromDataReader( IDataReader reader, int skip = 0, int take = int.MaxValue) { Guard.ArgumentNotNull(() => reader); if (reader.IsClosed) throw new ArgumentException("This operation is invalid when the reader is closed.", "reader"); var columns = new List<IDataColumn>(reader.FieldCount); var data = new List<object[]>(); var schema = reader.GetSchemaTable(); var nameCol = schema.Columns[SchemaTableColumn.ColumnName]; var typeCol = schema.Columns[SchemaTableColumn.DataType]; foreach (DataRow schemaRow in schema.Rows) { var column = new LightweightDataColumn((string)schemaRow[nameCol], (Type)schemaRow[typeCol]); columns.Add(column); } var fieldCount = reader.FieldCount; take = Math.Min(take, int.MaxValue - skip); int i = -1; while (reader.Read()) { i++; if (skip > i) continue; if (i >= skip + take) break; var values = new object[fieldCount]; reader.GetValues(values); data.Add(values); } var table = new LightweightDataTable(columns, data); return table; }