I kind of agree that you really don’t want to loop through each row just to find the correct row. So the method to use so you don’t need to loop through each row is to filter your data down to an array of rows. You can do this using LINQ, and I apologize if this is too technically - using .Select() or preferrably
Another thing to know is that when you filter this data, you will get potentially multiple rows that match, so you need to run the new array through a For each to delete them. And, since they are an array of rows, the original data set is referenced by this array so they are deleted from it.
here is pseudocode that represents this idea:
Assign activity: arrRows = dt1.AsEnumerable.Where(Function(r) r("ID").ToString.Trim = "123987" ).ToArray
For each row in arrRows 'TypeArgument: DataRow'
Delete Row activity: DataRow => row, DataTable => dt1