У меня есть страница ASP.NET (3.5), которая позволяет пользователю загружать файл Excel 2003 с несколькими листами, и эти данные вставляются в промежуточные таблицы в базе данных. Отображение таблиц / столбцов базы данных в таблицы / столбцы Excel указывается в файле XML. Я использую LINQ to SQL для отправки данных в базу данных.
ImportTablesDataContext db = new ImportTablesDataContext();
tblImportLoan loan; // class defined by LINQ to SQL
// iterate through each row of data from the Excel worksheet called Loans
foreach (DataRow dr in _data.Tables[ExcelSheetName].Rows)
{
loan = new tblImportLoan();
// iterate through each column in the mapping for the Loans worksheet
foreach (... column in mapping for this worksheet ...)
loan.GetType().GetProperty(column.DBName).SetValue(loan, GetValue(column, dr), null);
db.tblImportLoans.InsertOnSubmit(loan);
}
Я повторяю большую часть этого кода для каждого из 5 рабочих листов. Я бы хотел бы перебирать набор из 5 таблиц, определенных в отображении - но я не могу понять, как сделать жестко закодированные имена / методы / свойства классов динамическими (строки 2, 7 и 13 выше ). Это позволило бы мне не ссылаться на имена таблиц вне XML-файла.
Есть предложения?
EDIT:
Вот что я ищу ... но я не знаю, как делать строки 5 и 8.
foreach (... table in mapping ...)
{
foreach (DataRow dr in _data.Tables[table.ExcelSheetName].Rows)
{
obj = new <LINQ constructor derived from table name>;
foreach (... column in mapping ...)
obj.GetType().GetProperty(column.DBName).SetValue(obj, GetValue(column, dr), null);
db.<LINQ property derived from table name>.InsertOnSubmit(obj);
}
}