Создать класс из таблицы данных или таблицы базы данных - PullRequest
5 голосов
/ 20 июля 2010

У меня есть проект, в котором клиент может импортировать файл Excel, CSV или файл с разделителями табуляции.Этот файл загружается в таблицу данных, которую я конвертирую в таблицу базы данных SQLite.Я действительно предпочел бы работать со строго типизированными объектами против datatables, так есть ли способ легко преобразовать таблицу базы данных, созданную в строго типизированный класс, используя отражение?Кикер - это файл, импортированный в приложение, всегда будет отличаться (то есть разные столбцы), поэтому я не могу жестко закодировать любые строго типизированные объекты, они всегда должны генерироваться на лету.

Ответы [ 3 ]

4 голосов
/ 20 июля 2010

Теоретически, вы можете создать сборку, используя что-то вроде Reflection.Emit, или даже сгенерировать файлы кода и вызвать компилятор, чтобы встроить их в сборку.

Однако я не уверен, как этобыло бы полезно.При условии, что схема этих таблиц определяется во время выполнения, любое использование этих сгенерированных классов не сможет использовать эти строго типизированные свойства, которые вы добавили, без использования отражения, и в этот момент вы, по сути, имеете дело счто-то слабо набрано с добавлением производительности отражения.Динамические типы в C # 4.0 могут устранить снижение производительности, но вы все равно добавляете много сложности без реальной выгоды.

2 голосов
/ 20 июля 2010

Вы можете использовать новые функции dynamic в C # 4, если это возможно.В частности, ExpandoObject Class .

ExpandoObject представляет объект, члены которого можно динамически добавлять и удалять во время выполнения.

Вы такжеесть DynamicObject Class .

Для получения дополнительной информации посмотрите следующие ссылки:

Создание динамического класса

Заполнение и использование динамических классов в C # /. NET 4.0

Как создать динамический класс в C # 4?

0 голосов
/ 20 июля 2010

Райан уже задал правильный вопрос, и я также могу только согласиться, что единственное преимущество строго типизированного класса - это время разработки или компиляции, но не время выполнения.

Возможно, вы захотите после создания своегоТаблицы SQLlite создали некоторые классы строгого типа в другом приложении, которое использует эту таблицу.

В этом случае вы, вероятно, могли бы взглянуть на T4 - Text Transformation Toolkit , потому что он способенсоздавать классы строгого типа из запроса, чтобы вы могли использовать эти классы во время компиляции для дальнейших приложений.

Но прежде чем начать его использовать, вы должны знать, что T4 является одним из лучший секрет Visual Studio с.; -)

...