private static TableDescriptor GetTableDescriptor(ExcelWorksheet worksheet, ContentLoadType type) { var countOfKeys = 2; if (type.HasFlag(ContentLoadType.Column)) { countOfKeys++; } var descriptor = TableDescriptor.GetReadDynamic(worksheet.Name, new TableKeyDescriptor((new[] {1, 2, 3}).Take(countOfKeys).ToArray()), 2); return descriptor; }
private static TableDescriptor GetTableDescriptor(ExcelWorksheet worksheet, ContentLoadType type) { var countOfKeys = 2; if (type.HasFlag(ContentLoadType.Column)) { countOfKeys++; } var descriptor = TableDescriptor.GetReadDynamic(worksheet.Name, new TableKeyDescriptor((new[] { 1, 2, 3 }).Take(countOfKeys).ToArray()), 2); return(descriptor); }
/// <summary> /// Initializes a new instance of the <see cref="T:System.Object" /> class. /// </summary> public Searcher(List <TTable> tables, TableDescriptor descriptor, ContentLoadType type, bool hasSchema = true, Func <TTable, string[], bool> customPredicate = null) { Contract.Requires(descriptor != null); Contract.Requires(type.HasFlag(ContentLoadType.Table)); Contract.Requires((type.HasFlag(ContentLoadType.Table) && descriptor.Key.Items.Length >= 1)); Contract.Requires((type.HasFlag(ContentLoadType.Column) && descriptor.Key.Items.Length >= 2)); _tables = tables; var shift = 1; _columnKeyIndex = -1; if (type.HasFlag(ContentLoadType.Column)) { _columnKeyIndex = descriptor.Key.Items[descriptor.Key.Items.Length - shift++] - 1; } var schemaKeyIndex = -1; var tableKeyIndex = descriptor.Key.Items[descriptor.Key.Items.Length - shift++] - 1; if (hasSchema && shift < descriptor.Key.Items.Length) { schemaKeyIndex = descriptor.Key.Items[descriptor.Key.Items.Length - shift] - 1; } var additionalIndexes = descriptor.Key.Items.Take(descriptor.Key.Items.Length - shift).Select(i => i - 1).ToArray(); if (additionalIndexes.Length != 0) { if (customPredicate == null) { throw new ArgumentNullException("customPredicate"); } if (schemaKeyIndex >= 0) { _tablePredicate = dataRow => { var schema = dataRow[schemaKeyIndex]; var name = dataRow[tableKeyIndex]; var additional = dataRow.Where((s, i) => additionalIndexes.Contains(i)).ToArray(); return(table => table.Schema == schema && table.Name == name && customPredicate(table, additional)); }; } else { _tablePredicate = dataRow => { var name = dataRow[tableKeyIndex]; var additional = dataRow.Where((s, i) => additionalIndexes.Contains(i)).ToArray(); return(table => table.Name == name && customPredicate(table, additional)); }; } } else { if (schemaKeyIndex >= 0) { _tablePredicate = dataRow => { var schema = dataRow[schemaKeyIndex]; var name = dataRow[tableKeyIndex]; return(table => table.Schema == schema && table.Name == name); }; } else { _tablePredicate = dataRow => { var name = dataRow[tableKeyIndex]; return(table => table.Name == name); }; } } }
public void CreateDefaultTemplate(string filePath, ContentLoadType type, bool hasSchema = true) { string[] names; #region Names switch (type) { case ContentLoadType.Column: case ContentLoadType.TableOrColumn: names = hasSchema ? new[] { "Schema", "Table", "Column" } : new[] { "Table", "Column" }; break; case ContentLoadType.Table: names = hasSchema ? new[] { "Schema", "Table" } : new[] { "Table" }; break; default: throw new ArgumentOutOfRangeException(); } #endregion var descriptor = TableDescriptor.GetWrite("template", names); var set = new DataSet(); var dataTable = new DataTable(descriptor.SheetName); set.Tables.Add(dataTable); #region Fill table foreach (var columnName in descriptor.ColumnNames) { dataTable.Columns.Add(columnName, typeof(string)); } var getTableRow = hasSchema ? (Func <TTable, object[]>)(table => new object[] { table.Schema, table.Name }) : (table => new object[] { table.Name }); var getColumnRow = hasSchema ? (Func <TColumn, object[]>)(column => new object[] { column.Parent.Schema, column.Parent.Name, column.Name }) : (column => new object[] { column.Parent.Name, column.Name }); foreach (var table in _tables) { if (type.HasFlag(ContentLoadType.Table)) { dataTable.Rows.Add(getTableRow(table)); } if (type.HasFlag(ContentLoadType.Column)) { foreach (var column in table.Columns) { dataTable.Rows.Add(getColumnRow(column)); } } } #endregion #region Create file using (var sourceStream = _extractor.ReadFileFromResToStream("model.xlsx")) using (var destinationStream = File.Create(filePath)) { sourceStream.CopyTo((destinationStream)); } #endregion DataSheetManager.Write(filePath, set, descriptor); }