C # MVC: FuncКак мне получить динамический тип? - PullRequest
1 голос
/ 08 июля 2010

Эй, я пытаюсь отсортировать пользовательскую сетку данных по столбцам в зависимости от того, на что нажал пользователь. Переменная «sort» передается в контроллер, но это просто строка, в которой указано, какой столбец нужно отсортировать.

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

ParameterExpression param = Expression.Parameter(typeof(Table1), "x");
MemberExpression memberExp = Expression.Property(param, sort);      
var lambdaExp = Expression.Lambda<Func<Table1, int>>(memberExp, new ParameterExpression[] { param });

if (bool.Parse(Session["sort"].ToString()))
    sortedKeys = keys.OrderBy(lambdaExp).Skip((currentPage - 1) * _pageSize).Take(_pageSize);
else
    sortedKeys = keys.OrderByDescending(lambdaExp).Skip((currentPage - 1) * _pageSize).Take(_pageSize);

Как вы можете видеть в строке № 3, где я передаю делегат, от которого работает Func для столбца с типом типа int, но он будет меняться динамически в зависимости от того, по какому столбцу щелкнули.

Как мне это решить?

Спасибо!

1 Ответ

0 голосов
/ 07 августа 2010

Я предполагаю, что у вас есть удобный тип столбца, который будет System.Type. Давайте назовем это «columnType». Итак, что вы хотите сделать, это использовать не универсальный лямбда-метод:

Type funcType = typeof(Func<,>).MakeGenericType(typeof(Table1), columnType);
Expression.Lambda(funcType, memberExp, new ParameterExpression[] { param });
...