2010-07-08 6 views
1

Hey, j'essaie de trier une grille de données personnalisée de colonnes en fonction de ce que l'utilisateur a cliqué. La variable "sort" est transmise au contrôleur mais est juste une chaîne indiquant quelle colonne doit être triée.C# MVC: Func <Table1, "type d'exécution"> Comment obtenir un type dynamique?

Je dois obtenir le type de cette colonne à utiliser dans un LambdaExpression ... Heres le code

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); 

Comme vous pouvez le voir sur la ligne n ° 3 où je passe le délégué Func travaille à partir d'un colonne qui a un type d'int, mais qui va changer dynamiquement en fonction de quelle colonne a été cliquée.

Comment résoudre ce problème?

Merci!

Répondre

0

Je suppose que vous avez le type de colonne à portée de main, qui sera un System.Type. Appelons-le "columnType". Donc, ce que vous voulez faire est d'utiliser la méthode Lambda non générique:

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