次の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}))
このステートメントを実行すると、次の例外がスローされます。
メッセージ="KeinegenerischeMethode"Select"fürTyp"System.Linq.Queryable"ist mit den bereitgestellten Typargumenten undArgumentenkompatibel。Essolttenkeine Typargumente bereitgestellt werden、wenn die Methode nichtgenerischist。"
どうしたの?