В качестве входных данных для этой проблемы у меня есть экземпляр DataTable
. Для некоторых каркасных функций, которые я должен использовать, мне нужно передать строки из этого DataTable
как List<my_class>
, где свойства my_class
названы как столбцы ввода DataTable
.
Возможно, лучшее объяснение таково: вместо получения значения ячейки, например DataTableName.Rows[0]["first_column]
, мне нужно получить его как myList[0].first_row
.
Это означает преобразование строк в имена свойств на лету, поэтому Я думал о создании такой строки:
"namespace NewRow
{
class my_class
{
public string first_column { get; set; }
public string second_column { get; set; }
...
}
}"
, затем с помощью CSharpCodeProvider
для компиляции этой строки и создания List<my_class>
.
После того, как я использую var codeResult = provider.CompileAssemblyFromSource(new CompilerParameters(), codeAsString);
, я не не знаю, что делать дальше. Как мне получить новый класс как тип?
ПРИМЕЧАНИЯ
Я безуспешно пытался передать List<object>
моим функциям фреймворка. Неважно, если этот список заполнен анонимным объектом с правильно названными свойствами или жестко закодированными my_class
с правильно названными свойствами, я получаю ту же ошибку, говоря, что мой объект (из списка) не содержит свойства с именем first_column
.
Также обратите внимание, что, к сожалению, у меня нет доступа к этой функциональности фреймворка и я не могу его редактировать.
Функция фреймворка на самом деле ожидает IQueryable
, но я думал, что это будет будет проще работать с List
, а затем преобразовать его в IQueryable
непосредственно перед передачей этого списка в функцию (я могу сделать это с помощью функции my_list.AsQueryable()
), но если это поможет решить проблему, можно использовать IQueryable
.
ВОПРОСЫ
Я на правильном пути с CSharpCodeProvider
?
Если так, как я могу создать List<my_class>
на лету?
Есть ли другой способ, которым я не осведомлен о том, чтобы делать этот вид преобразования?