public override ITabularFileAdapter CreateFileAdapter(IReadOnlyCollection <string> columnNames) { ITabularFileAdapter result = new CommaDelimitedFileAdapter( this.FilePath, this.ProviderName, columnNames); return(result); }
public async Task <IRow[]> Query(IReadOnlyDictionary <string, string> columns) { if (null == columns) { throw new ArgumentNullException(nameof(columns)); } string query = string.Format( CultureInfo.InvariantCulture, CommaDelimitedFileAdapter.QueryTemplate, this.fileName); if (columns.Any()) { IList <KeyValuePair <string, string> > criteria = new List <KeyValuePair <string, string> >(columns.Count); foreach (KeyValuePair <string, string> column in columns) { string criterionValue = CommaDelimitedFileAdapter.ComposeCriterion(column.Value); KeyValuePair <string, string> criterion = new KeyValuePair <string, string>(column.Key, criterionValue); criteria.Add(criterion); } IReadOnlyCollection <string> filters = criteria .Select( (KeyValuePair <string, string> item) => string.Format( CultureInfo.InvariantCulture, CommaDelimitedFileAdapter.FilterTemplate, item.Key, item.Value)) .ToArray(); string filter = string.Join(CommaDelimitedFileAdapter.DelimiterFilter, filters); query = string.Concat(query, CommaDelimitedFileAdapter.WhereClausePrefix, filter); } OleDbCommand commandQuery = null; try { commandQuery = new OleDbCommand(query, this.connection); DbDataReader reader = null; try { reader = await commandQuery.ExecuteReaderAsync(); IList <IRow> rows = new List <IRow>(); while (reader.Read()) { string rowKey = (string)reader[0]; Dictionary <string, string> rowColumns = new Dictionary <string, string>(this.headers.Count - 1); for (int indexColumn = 1; indexColumn < this.headers.Count; indexColumn++) { object columnValue = reader[indexColumn]; if (null == columnValue) { continue; } string value = columnValue.ToString(); if (string.IsNullOrWhiteSpace(value)) { continue; } string columnHeader = this.headers.ElementAt(indexColumn); rowColumns.Add(columnHeader, value); } IRow row = new Row(rowKey, rowColumns); rows.Add(row); } IRow[] results = rows.ToArray(); return(results); } finally { if (reader != null) { reader.Close(); reader = null; } } } finally { if (commandQuery != null) { commandQuery.Dispose(); commandQuery = null; } } }