/// <inheritdoc /> protected override void VisitOfLts(MethodCallExpression node) { switch (node.Method.Name) { case MethodCall.TimeOut: visitor.SetTimeOut((int)node.Arguments[1].GetValueFromExpression()); base.Visit(node.Arguments[0]); break; case MethodCall.WatchSql: buildWatchSql = true; Visit(node.Arguments[1]); buildWatchSql = false; Visit(node.Arguments[0]); break; case MethodCall.Delete: Expression objectExp = node.Arguments[0]; Workflow(() => { writer.Delete(); var tableInfo = MakeTableInfo(objectExp.Type); var prefix = GetEntryAlias(tableInfo.TableType, string.Empty); writer.Alias(prefix); writer.From(); WriteTableName(tableInfo, prefix); }, () => { if (node.Arguments.Count > 1) { base.VisitCondition(node); } else { base.Visit(objectExp); } }); break; default: base.VisitOfLts(node); break; } }
/// <inheritdoc /> protected override void VisitOfLts(MethodCallExpression node) { switch (node.Method.Name) { case MethodCall.TimeOut: visitor.SetTimeOut((int)node.Arguments[1].GetValueFromExpression()); base.Visit(node.Arguments[0]); break; case MethodCall.WatchSql: buildWatchSql = true; Visit(node.Arguments[1]); buildWatchSql = false; Visit(node.Arguments[0]); break; case MethodCall.Insert: var insertFields = new List <string>(); Expression objectExp = node.Arguments[0]; base.Visit(objectExp); Workflow(() => { var tableInfo = MakeTableInfo(objectExp.Type); writer.Insert(); WriteTableName(tableInfo, string.Empty); var enumerator = insertFields.GetEnumerator(); if (enumerator.MoveNext()) { writer.OpenBrace(); writer.Name(enumerator.Current); while (enumerator.MoveNext()) { writer.Delimiter(); writer.Name(enumerator.Current); } writer.CloseBrace(); } else { throw new DException("未指定更新字段!"); } }, () => { using (var visitor = new InsertSelectVisitor(this, insertFields)) { visitor.Startup(node.Arguments[1]); } }); break; default: base.VisitOfLts(node); break; } }
/// <inheritdoc /> protected override void VisitOfLts(MethodCallExpression node) { switch (node.Method.Name) { case MethodCall.TimeOut: visitor.SetTimeOut((int)node.Arguments[1].GetValueFromExpression()); base.Visit(node.Arguments[0]); break; case MethodCall.WatchSql: buildWatchSql = true; Visit(node.Arguments[1]); buildWatchSql = false; Visit(node.Arguments[0]); break; case MethodCall.Update: Expression objectExp = node.Arguments[0]; Workflow(() => { writer.Update(); var tableInfo = MakeTableInfo(objectExp.Type); var prefix = GetEntryAlias(tableInfo.TableType, string.Empty); if (settings.Engine == DatabaseEngine.SqlServer || settings.Engine == DatabaseEngine.Access) { writer.Alias(prefix); } else { WriteTableName(tableInfo, prefix); } writer.Set(); Visit(node.Arguments[1]); if (settings.Engine == DatabaseEngine.SqlServer || settings.Engine == DatabaseEngine.Access) { writer.From(); WriteTableName(tableInfo, prefix); } }, () => { Visit(objectExp); }); break; default: base.VisitOfLts(node); break; } }