protected override void VisitWhere(ExpressionVisitorContext context, UpdateStatement statement, IExpression where) { /* * 注意:由于 MySQL 的 UPDATE 语句不支持 FROM 子句,因此必须将其改写为多表修改的语法。 * 由于 FROM 子句中可能包含 JOIN 类型语句,所以必须将 JOIN 子句中的条件式添加到 UPDATE 语句的 WHERE 子句中。 */ if (statement.HasFrom) { var conditions = ConditionExpression.And(); foreach (var source in statement.From) { if (source is JoinClause join) { conditions.Add(join.Conditions); } } if (conditions.Count > 0) { conditions.Add(where); where = conditions; } } //调用基类同名方法 base.VisitWhere(context, statement, where); }