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