I have a datatable which I use as a work queue. This datatable contains user IDs (io_dtInactiveUsers). However, some user IDs are supposed to be excluded from processing in the work queue. These user IDs which are supposed to be excluded can be found in a second datatable (dtExclusion).
The way I have built my automation is that for each row in io_dtInactiveUsers, I check if the user ID matches any of the rows in dtExclusion. If it does, then it sets the a boolean variable to True. This will remove the data row in io_dtInactiveUsers. Please see workflow attached in picture below:
However, I get the following error message:
âFor Each Row: Collection was modified; enumeration operation might not execute.â
I suspect the datatable does not like to be adjusted with while itâs still looping.
The forum topics I have found so far have only been able to delete rows if they are some specific value. Would therefore be very glad if I would receive some help to remove the rows if it matches any of the values in the second datatable.
Youâre right, you shouldnât modify a data table while youâre accessing their indexes.
There are multiple ways of achieving what youâre looking for, but keeping the logic you already built, you can simply have a 3rd data table, so if you want to keep a row, you add it to a new data table.
You can explore using the UiPath Join datatable activity, if you specify the columns you want to match UiPath will return a datatable where the ones that match have values and the ones that donât are null.
This is assuming the User IDs exist in the exact same way on both tables but in different columns.
You can use the Assign activity with the following LINQ query
dtOutput=io_dtInactiveUsers.AsEnumerable().Where(Function(row) NOT dtExclusion.AsEnumerable().Any(Function(x) x(âIDâ).ToString=row(âIDâ).ToString)).CopyToDatatable;
The dtOutput fetches data from io_dtInactiveUsers which are not in dtExclusion based on ID column (assumed that in both of these datatables ID is the common column to be matched)
I tried this out, but canât unfortunately get it to work. When I did a inner join, the output is a datatable where the results matched (7 rows out of 91). What I would like instead is the inverted of this: meaning I would like to have the other 84 rows instead.
Edit: It seems like I have solved the issue. Thank you for your input, and I hope you have a great weekend!