Выберите DataRow на основе двух условий столбца - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть данные, которые я знаю, что в начале я знаю, что они пустые, но, заполняя их, я не могу вытащить данные из этого условия на основе двух условий столбца, поэтому он удваивает (или более) число строк.

Возможно, я ошибаюсь, но моя цель - проверить, существует ли строка в таблице данных, если выполнены 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 - это всегда ничто, когда я знаю, что это не так. Может ли кто-нибудь помочь мне определить, что я делаю неправильно, то есть всегда добавляет строку? Консоль просто продолжает говорить "Строка не существует".

1 Ответ

1 голос
/ 17 февраля 2020

Я не проверял, чтобы быть уверенным, но я вполне уверен, что проблема заключается в том, что вы используете метод 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, измените тип generic c вызовов Field .

...