public List <Record> Read() { OleDbConnection conn = new OleDbConnection { ConnectionString = ConnectionString }; conn.Open(); OleDbCommand comm = new OleDbCommand { CommandText = SelectStatement, Connection = conn }; OleDbDataReader reader = comm.ExecuteReader(); List <Record> records = new List <Record>(); while (reader.Read()) { var record = ReaderSettings .ToArray() .Select((KeyValuePair <string, Type> keyValue, int index) => { var columnName = keyValue.Key; var columnType = keyValue.Value; object value = reader.GetValue(index); if (columnType == typeof(string)) { return(new KeyValuePair <string, ColumnValue>( columnName, new ColumnValue( value, // DecodeString((byte[])value, MdbEncoding), columnType ) )); } return(new KeyValuePair <string, ColumnValue>( columnName, new ColumnValue( value, columnType ) )); }) .ToDictionary( keyValue => keyValue.Key, keyValue => keyValue.Value ); records.Add((Record)record); } conn.Close(); return(records); }