根据两个列条件选择一个DataRow

问题描述 投票:0回答:1

我有一个数据表,一开始我知道它是空的,但是当我填充它时,我无法基于两个列条件从它中取出数据行,因此它使(或更多)行。

我可能正在解决这个错误,但是我的目的是检查如果满足两个条件,则该行是否存在于数据表中,如果存在,则获取该行并进行修改。

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总是无关紧要,但我知道并非如此。有谁能帮助我确定我总是在增加行的地方做错了什么?控制台一直在说“行不存在”。

vb.net linq datatable datarow
1个回答
0
投票

我尚未进行测试来确定,但我可以肯定的是问题在于您对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调用的通用类型。

© www.soinside.com 2019 - 2024. All rights reserved.