Как построить Subsonic 3 запрос с динамическими именами таблиц и столбцов, используя отражение - PullRequest
0 голосов
/ 09 сентября 2010

Я хотел бы построить динамический запрос Subsonic 3, используя код, чтобы получить коллекцию типа.SQL хотел бы это:

select * from @tableName where @columnName1 = @columnValue1

Дозвуковой запрос будет выглядеть так:

List<object> = new DB.Select.From<getTypeClass(tableName)>.Where(columnName1).IsEqualTo(columnValue1).ExecuteTypeList<getTypeClass(tableName)>();

Я хотел бы выполнить это с помощью отражения, но я не думаю, что это было бы возможнопоместить нестатический элемент между предложениями <>.

1 Ответ

0 голосов
/ 10 сентября 2010

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

Type toType;
var GenericListOfType = typeof(List<>).MakeGenericType(new []{toType});
var ListOfType = Activator.CreateInstance(GenericListOfType);

MethodInfo GenericExecuteTypedList = typeof(Select).GetMethod("ExecuteTypedList").MakeGenericMethod(toType);

И вызовите этот метод следующим образом:

ListOfType = GenericExecuteTypedList.Invoke(new Select().From(toType.Name), null);

Метод From имеет перегрузку, которая принимает строковое значение.Передача имени типа работала нормально, в моем случае таблица и имя класса были идентичны.

Легко добавить некоторые операторы where непосредственно перед вызовом универсального метода.

...