Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在编译时委托类型未知的情况下创建(TDelegate的)表达式?_.net_Vb.net_Linq_Lambda_Expression - Fatal编程技术网

.net 如何在编译时委托类型未知的情况下创建(TDelegate的)表达式?

.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

我在下面有一段代码,可以让绑定到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 = 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
,对吗?一些丑陋但简单的反射代码应该可以完成这项工作。。。