如何创建表达式(TDelegate),其中委托类型在编译时是未知的?

时间:2011-09-21 08:37:12

标签: .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 = 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()

1 个答案:

答案 0 :(得分:0)

在构建使用接口作为实体的自定义ORM时,我们遇到了同样的问题。您可以从这些来源https://github.com/acropolium/AcroDB/tree/master/AcroDB/QueryableProxy

中探索解决方案