Преобразование DataTable.Rows в список не зная имен столбцов и сосчитать - PullRequest
1 голос
/ 07 февраля 2020

В качестве входных данных для этой проблемы у меня есть экземпляр 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> на лету?
Есть ли другой способ, которым я не осведомлен о том, чтобы делать этот вид преобразования?

...