Как программно получить доступ к типам данных, доступным в приложении .net - PullRequest
0 голосов
/ 16 февраля 2012

Короткий вопрос: есть ли способ получить доступ к типам данных, доступным в приложении .net, как к группе (и, следовательно, запросить их с помощью LINQ).Вот так ...

Dim myType = from l in myapplication.availabledatatypes where l.name="name of type I want" select l

Более подробное объяснение: я пытаюсь переместить множество старых записей из таблиц в идентичные «архивные» таблицы с помощью Linq to SQL.В рамках этого процесса мне нужно выбрать записи из оперативной таблицы и преобразовать их в (идентичный) тип архива.Я пытаюсь сделать это чисто с помощью одного метода, который можно использовать для всех различных пар таблиц / архивных таблиц с помощью отражения, следуя этому превосходному руководству http://michaelmerrell.com/2010/08/converting-a-linq-object-to-a-similar-object/

Мой метод преобразования потребует вводавведите object и преобразуйте его в выходной объект типа type, который я затем планирую преобразовать в требуемый выходной тип в методе, который вызывает метод преобразования.Я могу получить свойство datacontext, которое имеет то же имя, что и тип, в который я хочу преобразовать, но я не могу программно получить тип с тем же именем.

Dim typeIamLookingFor as propertyInfo= from l in mydatacontext.getproperties where l.name.contains("archive") and l.name.contains(input.gettype.name) select l

Как выбрать из типов, доступных в моем пространстве имен, имя, имя которого совпадает с именем typeIamLookingFor.Очевидно, .getType возвращает тип PropertyInfo, но мне действительно нужен тип с именем = typeiamlookingfor.name

Edit Спасибо за предложения.Type.GetType приближает меня, но компилятор теперь говорит, что объект должен реализовывать IConvertible.Я собираюсь исследовать эту другую ошибку и принять этот ответ.

Dim output as object
Dim typeName as string = "namespace." & inputObject.gettype.name & "_Archive"
output = output = Convert.ChangeType(output, Type.GetType(typeName))  //generates error: Object Must Implement IConvertible

1 Ответ

2 голосов
/ 16 февраля 2012

Я думаю, вы слишком усложняете свое решение. Исходя из вашего описания, вам, вероятно, просто нужно Type.GetType():

Type typeIamLookingFor = Type.GetType("archive." + typeName)

Есть что-то еще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...