以下LINQ查询。调用扩展方法在Visual Basic 2010中选择正常工作:
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}))
执行此语句会引发以下异常:
Message =“Keine generische Methode”选择“fürPlass”System.Linq.Queryable“ist mit den bereitgestellten Typargumenten und Argumenten kompatibel.Es sollten keine Typargumente bereitgestellt werden,wenn die Methode nicht generisch ist。”
怎么了?
答案 0 :(得分:0)
选择有两个类型参数。 从和到类型。同时指定。