Skip to content

Commit 9f00032

Browse files
PR feedback
1 parent 2461a45 commit 9f00032

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

src/libraries/Microsoft.PowerFx.Core/Public/Values/CollectionTableValue.cs

+9-6
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ public override DValue<RecordValue> Last(bool mutationCopy = false)
184184
public override async Task<DValue<BooleanValue>> RemoveAsync(IEnumerable<FormulaValue> recordsToRemove, bool all, CancellationToken cancellationToken)
185185
{
186186
var ret = false;
187-
var markedToDeletion = new HashSet<T>();
187+
var markedToDeletionIndexes = new HashSet<int>();
188188
var errors = new List<ExpressionError>();
189189

190190
cancellationToken.ThrowIfCancellationRequested();
@@ -194,26 +194,29 @@ public override async Task<DValue<BooleanValue>> RemoveAsync(IEnumerable<Formula
194194
return await base.RemoveAsync(recordsToRemove, all, cancellationToken).ConfigureAwait(false);
195195
}
196196

197+
var rowsArray = _enumerator.ToArray();
198+
197199
foreach (RecordValue recordToRemove in recordsToRemove)
198200
{
199201
var found = false;
200202

201-
foreach (T item in _enumerator)
203+
for (int i = 0; i < rowsArray.Length; i++)
202204
{
203205
cancellationToken.ThrowIfCancellationRequested();
204206

207+
var item = rowsArray[i];
205208
DValue<RecordValue> dRecord = Marshal(item);
206209

207210
if (await MatchesAsync(dRecord.Value, recordToRemove, cancellationToken).ConfigureAwait(false))
208211
{
209-
if (markedToDeletion.Contains(item))
212+
if (markedToDeletionIndexes.Contains(i))
210213
{
211214
continue;
212215
}
213216
else
214217
{
215218
found = true;
216-
markedToDeletion.Add(item);
219+
markedToDeletionIndexes.Add(i);
217220
}
218221

219222
if (!all)
@@ -230,9 +233,9 @@ public override async Task<DValue<BooleanValue>> RemoveAsync(IEnumerable<Formula
230233
}
231234
}
232235

233-
foreach (var delete in markedToDeletion)
236+
foreach (var index in markedToDeletionIndexes)
234237
{
235-
_sourceList.Remove(delete);
238+
_sourceList.Remove(rowsArray[index]);
236239
ret = true;
237240
}
238241

0 commit comments

Comments
 (0)