private static IExprExec?WhenMatched(ExprMerge merge, TempTableBase tempTable) { IExprExec?e = null; if (merge.WhenMatched != null) { if (merge.WhenMatched is ExprMergeMatchedUpdate update) { e = SqQueryBuilder .Update(merge.TargetTable) .Set(update.Set) .From(merge.TargetTable) .InnerJoin(tempTable, merge.On) .Where(update.And); } else if (merge.WhenMatched is ExprMergeMatchedDelete delete) { ExprBoolean filter = SqQueryBuilder.Exists(SqQueryBuilder.SelectOne() .From(tempTable) .Where(merge.On)); if (delete.And != null) { filter = filter & delete.And; } e = SqQueryBuilder.Delete(merge.TargetTable).From(merge.TargetTable).Where(filter); } else { throw new SqExpressException($"Unknown type: '{merge.WhenMatched.GetType().Name}'"); } } return(e); }