5

我有一个产生匿名类型的 Linq 查询。但是,现在我想使用这种匿名类型的参数,它似乎不起作用。

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

现在编译器在表达式 obj.parameter 上抛出一个错误:“Option Strict On 不允许后期绑定”。如果我理解正确,编译器不知道匿名类型的参数。我根据 Google 结果尝试了 Option Infer On(并删除了 As Object),但没有帮助。这似乎是有道理的,因为它似乎总是对我来说是一种扩大的转变。

无论如何要解决这个问题,还是我应该创建一个自定义类型?

4

1 回答 1

4

声明匿名类型的代码(即SelectLINQ 查询的一部分)必须与使用它的代码使用相同的方法,并且Query变量的声明必须具有推断类型。将匿名类型转换为 an 后,您将无法访问它的属性,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 回答