5

匿名型を生成するLinqクエリがあります。ただし、この匿名タイプのパラメーターを使用したいのですが、機能していないようです。

For Each obj As Object in Query
Dim row As DataRow = obj.parameter
...
Next obj

これで、コンパイラは式obj.parameterにエラーをスローします:「OptionStrictOnは遅延バインディングを許可しません」。私が正しく理解していれば、コンパイラは匿名型のパラメータを知りません。Googleの結果に基づいてOptionInferOnを試しました(そしてAs Objectを削除しました)が、役に立ちませんでした。それは私にとって常に拡大する転換であるように思われるので、それは理にかなっているようです。

これを修正する方法はありますか、それともカスタムタイプを作成するだけですか?

4

1 に答える 1

4

匿名型(つまり、SelectLINQクエリの一部)を宣言するコードは、それを使用するコードと同じメソッドであるQuery必要があり、変数の宣言は推論された型である必要があります。Objectにキャストできる名前付き型がないため、にキャストした後は匿名型のプロパティにアクセスできません。

したがって、LINQクエリ(または、少なくとも、Select新しい匿名型に含まれる部分)が同じメソッド内にあることを確認してください。例えば

Dim Query = From prod In products
            Select prod.Name, prod.Price

For Each obj in Query
    Dim name = obj.Name
    ...
Next obj
于 2012-08-30T12:45:45.090 に答える