// Table Aliases
var t0 = new Orders().AsQueryable();
var t1 = new OrderDetails().AsQueryable();
// Ids are being obtained for the records to be deleted...
var sql = Odb.SQL.Select(x => x.Fields(x[t0.OrderID]).From(t0).Top(100));
var ids = connection.Sql(sql).Map<string>().ToList();
var tasks = new List<Task>();
var index = 0;
var chunk_size = 5;
int affected_rows = 0;
while (true)
{
var items = ids.Skip(index).Take(chunk_size);
if (items.Count() == 0) break;
var task = Task.Run(() => {
var query = Odb.SQL.Batch();
query.{{hl}}Delete{{/hl}}(x => x.From(t1).Where(x[t1.OrderID].IN(items)));
query.{{hl}}Delete{{/hl}}(x => x.From(t0).Where(x[t0.OrderID].IN(items)));
Interlocked.Add(ref affected_rows, cn.Sql(query).NonQuery());
});
tasks.Add(task);
index += items.Count;
}
Task.WaitAll(tasks.ToArray());
Console.WriteLine("\n\n" + affected_rows + " row(s) affected.\n\n");
cTZXMe