У меня есть форма, в которой пользователь выберет следующее из выпадающих списков:
table_name
columnName_to_sort_by
columnName_to_search_in
Пользователь должен ввести Search_text
в текстовое поле
Форма должна составлять данные из многих таблиц. Я хочу избежать написания сортировки и искать каждое поле для каждой из таблиц. Вот почему я хочу использовать деревья выражений. Я хочу построить запрос динамически.
Я хочу написать общий метод, который будет генерировать дерево выражений для методов select
, where
и orderby
, в зависимости от пользовательского ввода. Я могу использовать System.Reflection
, чтобы получить Type
, который запрашивается (все мои таблицы являются типами - я использую LinqToSql).
Я не знаю, как формировать деревья выражений.
Вот что у меня есть:
private static List<T> GetSortedData<T>( string sortColumnName)
{
var type = typeof(T);
var property = type.GetProperty(sortColumnName);
var parameter = Expression.Parameter(type, "p");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExp = Expression.Lambda(propertyAccess, parameter);
MethodCallExpression resultExp = Expression.Call(typeof(Queryable), "OrderBy", new Type[] { type, property.PropertyType }, WHAT_SHOULD_BE_HERE, Expression.Quote(orderByExp));
return (List<T>)Expression.Lambda(resultExp).Compile().DynamicInvoke();
}
Как я могу динамически реализовать select
, sort
и orderby
, используя деревья выражений?