/// <summary> /// Read virtual table inside ado.net <paramref name="dataTable"/>, assigning given column names; /// columns of the virtual table can be sparse. /// </summary> /// <param name="dataTable"> /// Mandatory /// </param> /// <param name="startRowIndex"> /// 0-based row index of the first row with data /// </param> /// <param name="endRowIndex"> /// Optional /// </param> /// <param name="columns"> /// Dictionary with key being assigned column name and value - zero-based column index in <paramref name="dataTable"/>. /// </param> public AdoTableReader(DataTable dataTable, int startRowIndex, int?endRowIndex, IList <KeyValuePair <string, int> > columns) { Check.DoRequireArgumentNotNull(dataTable, nameof(dataTable)); Check.DoRequireArgumentNotNull(columns, nameof(columns)); _columnNames = columns.OrderBy(p => p.Value).Select(p => p.Key).ToList(); var columnNameIndex = columns.ToDictionary(p => p.Key, p => p.Value); Rows = new AdoTableRowReaderCollection(startRowIndex, endRowIndex, dataTable, columnNameIndex); }
/// <summary> /// Read whole table, without renaming or excluding columns. /// </summary> /// <param name="dataTable"> /// Mandatory /// </param> public AdoTableReader(DataTable dataTable) { Check.DoRequireArgumentNotNull(dataTable, nameof(dataTable)); _columnNames = dataTable.Columns.Cast <DataColumn>().Select(c => c.ColumnName).ToList(); var columnNameIndex = dataTable.Columns.Cast <DataColumn>().ToDictionary(c => c.ColumnName, c => c.Ordinal); Rows = new AdoTableRowReaderCollection(0, null, dataTable, columnNameIndex); }