1

以下 LINQ 查询分别。在 Visual Basic 2010 中调用扩展方法 Select 工作正常:

Dim qAvSalary = qJobData.Select(Function(e) e.AvSalary)

但是这样做我无法使用字符串变量指定我想要查询的属性的名称(例如 AvSalary)。如果我使用 LINQ 表达式树,这应该是可能的。搜索并尝试了很长时间如何将查询转换为相应的表达式树,但没有成功。我的最终方法是:

' The IQueryable data to query.
Dim queryableData As IQueryable(Of JobData) = qJobData.AsQueryable()
Dim pe As ParameterExpression = Expression.Parameter(GetType(JobData), "e")
Dim sPropertyName = "AvSalary"      ' or some other property depending on the business logic
Dim propex = Expression.Property(pe, sPropertyName)

Dim selectCallExpr As MethodCallExpression = Expression.Call(
        GetType(Queryable),
        "Select",
        New Type() {queryableData.ElementType},
        queryableData.Expression,
        Expression.Lambda(Of Func(Of JobData, System.Nullable(Of Int32)))(
                    propex,
                    New ParameterExpression() {pe}))

执行此语句会引发以下异常:

消息 = “Keine generische Methode “Select” für Typ “System.Linq.Queryable” ist mit den bereitgestellten Typargumenten und Argumenten kompatibel. Es sollten keine Typargumente bereitgestellt werden, wenn die Methode nicht generisch ist. “

怎么了?

4

1 回答 1

0

Select 有两个类型参数。from和to类型指定两者。

于 2012-05-23T11:49:22.320 回答