查询中的后期绑定

时间:2015-03-20 20:17:15

标签: vb.net linq datarow option-strict

是的,我知道Option Strict做了什么,我经常使用它。我的问题源于我的Linq查询,而我似乎无法弄清楚如何从中抛出它。我希望在给定的表中获取所有DataRows,其中行的id等于我给它的id。此问题在没有Option Strict的情况下工作得很好我得到了我需要的行,但是我想要它。

错误:选项严格禁止后期绑定

这就是我现在所拥有的......

  Dim cRows() As DataRow = (From cRow In MasterDataSet.Tables(1).Rows Where cRow(childTableKey) = intParID).ToArray

错误发生在下面: cRow(childTableKey)

我也知道这个错误意味着什么,但似乎无法想象如何阻止它将其视为错误。我已经尝试过铸造它等等......

3 个答案:

答案 0 :(得分:0)

尝试使用

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

答案 1 :(得分:0)

试试这个:

Dim filteredTable1Data= MasterDataSet.Tables(1).AsEnumerable().
    Where(Function(r) r.Field(of Integer)("childTableKey")=intParID)

有关详细信息,请参阅:
Queries in LINQ to DataSet
LINQ to DataSet Examples
Creating a DataTable From a Query (LINQ to DataSet)

答案 2 :(得分:0)

如果没有其他扩展程序,则需要将行从RowCollection复制到Array。然后你可以使用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()