Here is what I am trying to do:
Compare every row of compareList with every row of refList
----- Do you find 'Leistungscode' of compareList in refList?
----- Yes--> Ignore
----- No--> New Entry, add to resutList
My problem is that with my for each loop, it creates a new entry every time when Leistungscode
doesn't match up, but I need to look through the whole refList
first and then add it to the list if I haven't found it. Do you have any idea how to do it?
Here is what I tried:
For Each rowCompare In compareList
For Each rowRef In refList
If rowCompare.Leistungscode.CompareTo(rowRef.Leistungscode) = 0 Then
Else
resultList.Add(New ISAACService(rowCompare.Leistungscode, rowCompare.K_Art, rowCompare.UANR, rowCompare.Ueberbegriff, rowCompare.Benennung, rowCompare.Anzahl, rowCompare.Einheit, rowCompare.Einzelkosten, rowCompare.Summencode))
End If
Next
Next
CodePudding user response:
First I think you should not use CompareTo
. CompareTo
does extra work determining position. You just need an equals sign.
The empty If
, with code only in the else, can be corrected by adding Not
to the if.
The real key here is Exit For
. Once you find an instance with no match the instance is added to the resultList
so we want to stop searching at that point to avoid duplicate entries in the resultList
. Exit For
only exits the inner For
loop. The outer loop will continue with the next element of the commpareList
.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
For Each rowCompare In compareList
For Each rowRef In refList
If Not rowCompare.Leistungscode = rowRef.Leistungscode Then
resultList.Add(New ISAACService(rowCompare.Leistungscode, rowCompare.K_Art, rowCompare.UANR, rowCompare.Ueberbegriff, rowCompare.Benennung, rowCompare.Anzahl, rowCompare.Einheit, rowCompare.Einzelkosten, rowCompare.Summencode))
Exit For
End If
Next
Next
MessageBox.Show(resultList.Count.ToString)
End Sub