.net 如何在编译时委托类型未知的情况下创建(TDelegate的)表达式?
我在下面有一段代码,可以让绑定到gridview的集合通过单击列标题进行排序。这里的问题是“IPerson”在编译时是未知的。我希望委托类型能够通过从gridview数据源获取来决定.net 如何在编译时委托类型未知的情况下创建(TDelegate的)表达式?,.net,vb.net,linq,lambda,expression,.net,Vb.net,Linq,Lambda,Expression,我在下面有一段代码,可以让绑定到gridview的集合通过单击列标题进行排序。这里的问题是“IPerson”在编译时是未知的。我希望委托类型能够通过从gridview数据源获取来决定 Dim list As List(Of IPerson) = CType(Session("DataSource"), List(Of IPerson)) Dim dataType As Type = list.GetType.GetGenericArguments(0) Dim param = Expressio
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()
在构建将接口用作实体的自定义ORM时,我们也遇到了同样的问题。您可以从这些来源探索解决方案,因此如果
列表
以对象
的形式输入,您需要IPerson
的唯一其他地方就是作为类型参数传递给表达式。Lambda
,对吗?一些丑陋但简单的反射代码应该可以完成这项工作。。。