Vb.net 查询中的后期绑定

Vb.net 查询中的后期绑定,vb.net,linq,datarow,option-strict,Vb.net,Linq,Datarow,Option Strict,是的,我知道Option Strict做什么,而且我经常使用它。我的问题源于我的Linq查询,我似乎不知道如何从呕吐中得到它。我想得到给定表中的所有DataRows,其中一行的id等于我给它的id。此外,如果不使用a上的选项Strict,该查询也可以正常工作,因为我得到了所需的行,但我想启用它 错误:选项严格禁止延迟绑定 这是我现在拥有的… Dim cRows() As DataRow = (From cRow In MasterDataSet.Tables(1).Rows Where cR

是的,我知道Option Strict做什么,而且我经常使用它。我的问题源于我的
Linq
查询,我似乎不知道如何从呕吐中得到它。我想得到给定表中的所有
DataRows
,其中一行的id等于我给它的id。此外,如果不使用a上的
选项Strict
,该查询也可以正常工作,因为我得到了所需的行,但我想启用它

错误:选项严格禁止延迟绑定

这是我现在拥有的…

  Dim cRows() As DataRow = (From cRow In MasterDataSet.Tables(1).Rows Where cRow(childTableKey) = intParID).ToArray
错误发生在下面:cRow(childTableKey)

我也知道这个错误是什么意思,但似乎不知道如何阻止它把它视为一个错误。我已经试过铸造它了,比如说…

试着使用它

In MasterDataSet.Tables(1) Where CType(cRow(childTableKey), Integer)
而不是

In MasterDataSet.Tables(1).Rows Where cRow(childTableKey)
下面的示例适用于使用Option Strict的我:

    Dim ds As New DataSet
    Dim dt As New DataTable
    ds.Tables.Add(dt)
    Dim dc As New DataColumn
    dc.DataType = GetType(System.Int32)
    dt.Columns.Add(dc)
    Dim dr As DataRow = dt.NewRow
    dr(0) = 10
    dt.Rows.Add(dr)

    Dim rows As DataRow() = (From r In ds.Tables(0) Where CType(r(0), Integer) = 10).ToArray
试试这个:

Dim filteredTable1Data= MasterDataSet.Tables(1).AsEnumerable().
    Where(Function(r) r.Field(of Integer)("childTableKey")=intParID)
有关更多信息,请参阅:



如果没有其他扩展名,您需要将行从
行集合
复制到
数组
。然后可以使用LINQ

Dim myRows(-1) as DataRow
MasterDataSet.Tables(1).Rows.CopyTo(myRows, 0)

 Dim cRows() As DataRow = (From cRow In myRows 
    Where CInt(cRow(childTableKey)) = intParID).ToArray()

您需要将行的值强制转换为整数。这对你有用吗
Where Cint(cRow(childTableKey))=intParID
@ps2goat不,不,我已经试过了,谢谢。很高兴你熟悉Option Strict…但是你收到了什么错误?@Greg很抱歉,我从标题中删除了它,本来打算把它放在我的帖子中,但忘了…对不起,应该链接到。您需要引用
System.Data.DataSetExtensions.dll
。您是否尝试过不使用.Rows并将cRow(childTableKey)强制转换为整数?您有System.Data.DataSetExtensions参考吗?