Vb.net 查询中的后期绑定
是的,我知道Option Strict做什么,而且我经常使用它。我的问题源于我的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
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参考吗?