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}))

このステートメントを実行すると、次の例外がスローされます。

メッセージ="KeinegenerischeMethode"Select"fürTyp"System.Linq.Queryable"ist mit den bereitgestellten Typargumenten undArgumentenkompatibel。Essolttenkeine Typargumente bereitgestellt werden、wenn die Methode nichtgenerischist。"

どうしたの?

4

1 に答える 1

0

Select には 2 つの型パラメーターがあります。fromおよびtoタイプ。両方を指定してください。

于 2012-05-23T11:49:22.320 に答える