ich einen Business-Service zu schreiben, die alle Datensätze in einem BC iterieren muss, und einige von ihnen löschen:Wie kann ich Datensätze in einer Schleife löschen?
bc.ExecuteQuery(ForwardBackward);
var isRecord = bc.FirstRecord();
while (isRecord) {
if (...) {
bc.DeleteRecord();
}
isRecord = bc.NextRecord();
}
jedoch DeleteRecord moves the cursor to the next one, also würde ich einen Datensatz für jeden ein Wesen werden Skipping gelöscht, was ich nicht will. Gibt es einen Standard-ish Weg, um dies zu lösen?
Ich denke, ich könnte nur zwei Schleifen machen, eine für die Überprüfung und eine andere für die Löschung ... es würde funktionieren, aber es ist einfach albern, zweimal über die Datensätze zu iterieren, es muss einen besseren Weg geben direkt auf, wenn (...) Bedingung abhängig
bc.ExecuteQuery(ForwardBackward);
var isRecord = bc.FirstRecord();
var list = [];
while (isRecord) {
if (...) {
list.push(bc.GetFieldValue("Id"));
}
isRecord = bc.NextRecord();
}
bc.ClearToQuery();
bc.SetSearchSpec("Id", "='" + list.join("' OR ='") + "'"); // "='1-ABCD' OR ='1-1234'"
bc.ExecuteQuery(ForwardBackward);
while (bc.FirstRecord()) {
bc.DeleteRecord();
}
Das Problem ist, dass DeleteRecord nicht zurückgibt etwas. Andernfalls könnte die Logik leicht mit einer if-Schleife neu angeordnet werden. Ihre Logik, zu einer Liste zu wechseln und selektiv zu löschen, sieht optimiert aus. –