2011-09-21 25 views
1

我有一个代码如下,使集合绑定到一个gridview能够通过单击列标题进行排序。这里的问题是“IPerson”在编译时未知。我希望委托类型能够通过从gridview数据源获取来决定。如何在编译时创建委托类型未知的表达式(TDelegate的)?

Dim list As List(Of IPerson) = CType(Session("DataSource"), List(Of IPerson)) 
Dim dataType As Type = list.GetType.GetGenericArguments(0) 
Dim param = Expression.Parameter(dataType, e.SortExpression) 
Dim sortExpression = Expression.Lambda(
     Of Func(Of IPerson, Object))(
     expression.Convert(
      Expression.Property(param, e.SortExpression), GetType(Object) 
      ), param) 

GridView1.DataSource = list.AsQueryable.OrderBy(sortExpression) 
GridView1.DataBind() 
+0

因此,如果'list'输入为'object',那么你需要'IPerson'的唯一其他地方就是作为一个类型参数传递给'Expression.Lambda',对吧?一些丑陋但简单的反射代码应该可以完成这项工作...... – AakashM

回答

相关问题