public static TableSchema Schema(this IDataReader reader) { var schemaTable = reader.GetSchemaTable(); if (schemaTable == null) { return(null); } var colNames = schemaTable.Columns.OfType <DataColumn>().Select(c => c.ColumnName).ToHashSet(); var cols = schemaTable.Rows.Cast <DataRow>().Select(r => { var col = new ColumnSchema(); foreach (var prop in col.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)) { if (colNames.Contains(prop.Name)) { col.SetPropValue(prop.Name, r[prop.Name]); } } return(col); }); return(new() { Columns = cols.ToArray() }); }