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
调用的通用类型。
我有一个数据表,我知道它一开始是空的,但是当我填充它时,我无法根据两列条件从中取回数据行,所以它加倍(或更多)行数。
我可能做错了,但我的目标是在满足 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
调用的通用类型。