Для данного случая предлагаю update в цикле, обернутую в транзакцию.
Так как даже в SQL такое не выразить
Примерно так
public async Task ApplyRange(Guid pharmacyId, IEnumerable<(Guid id, int count)> products)
{
await _table.BeginTransactionAsync();
for (var (id, count) in products)
{
await _table.Where(e => e.PharmacyId == pharmacyId && e.ProductId == id)
.ExecuteUpdateAsync(entity => entity.SetProperty(x => x.Count, x => x.Count + count))
}
await _table.CommitTransactionAsync();
}
Единственная проблема здесь в множественных RTT при каждом запросе, но все нивилируется тем, что выполняется в транзакции, т.е. большая задержка будет при коммите. Но рекомендую найти какую-нибудь либу, которая будет батчить подобные операции
P.S.
1. Есть CreateExecutionStrategy, который и реализует семантику транзакции
2. Код писал здесь в редакторе, поэтому может даже не компилироваться - главная задача дать идею