Select 基于两列条件的 DataRow

Select a DataRow based on two column conditions

我有一个数据表,我知道它一开始是空的,但是当我填充它时,我无法根据两列条件从中取回数据行,所以它加倍(或更多)行数。

我可能做错了,但我的目标是在满足 2 个条件的情况下检查数据表中是否存在该行,如果存在则获取该行并对其进行修改。

Dim qryB = From drw As DataRow In oDT_Signals.Rows
           Where drw("SG").Equals(sgrp) AndAlso drw("EP").Equals(srchPt)
           Select drw

Dim rslt = qryB.SingleOrDefault

If IsNothing(rslt) Then
    ed.WriteMessage("Row does not exist")
    oDT_Signals.Rows.Add(0, 0, sgrp, rw.sPt, PtList.IndexOf(rw.sPt), rw.ePt, PtList.IndexOf(rw.ePt), "NIL", rw.Len, 0, rw.Phases, rw.Size, rw.Core, rw.Ins, rw.Temp, rw.Table, "NIL",
                            "NA", "NA", rw.mVAm, ldVal, 0, 0, rw.Zs, 0, 0, rw.ePt.X, rw.ePt.Y, rw.mVtest, 0, 0, rw.Ztest, 0, 0)

Else
    ed.WriteMessage("Row does exist")
    Dim dr As DataRow = qryB.First
    dr("LOAD") = Math.Round(ldVal + dr("LOAD"), 2, MidpointRounding.AwayFromZero)
End If

问题是 rslt 总是什么都没有,当我知道情况并非如此时。有谁能帮我确定我做错了什么,就是总是添加行?控制台一直在说 "Row does not Exist".

我还没有测试确定,但我相当确定问题是您使用了 Object.Equals 方法,该方法将测试引用相等性。如果您感兴趣的是价值平等,请对其进行测试。改变这个:

Where drw("SG").Equals(sgrp) AndAlso drw("EP").Equals(srchPt)

像这样:

Where drw.Field(Of String)("SG") = sgrp AndAlso drw.Field(Of String)("EP") = srchPt

如果列不包含 Strings,请更改 Field 调用的通用类型。