ScriptDom + DeleteStatement

ScriptDom + DeleteStatement

我想在任何 "DeclareTableVariableStatement" 之后插入 "DeleteStatement" 但我不知道怎么办! 这是我的示例代码。

public override void Visit(StatementList node)
{
    foreach (DeclareTableVariableStatement declareTableVariableStatement in node.Statements.Where(a => a is DeclareTableVariableStatement).ToList())
    {
        BeginEndBlockStatement deleteBeginEndBlockStatement = new BeginEndBlockStatement()
        {
            StatementList = new StatementList()
        };

        DeleteStatement deleteStatement = new DeleteStatement()
        {
           DeleteSpecification=new DeleteSpecification()
           {
                Target= ???
           }
        };
        deleteBeginEndBlockStatement.StatementList.Statements.Add(deleteStatement);
        node.Statements.Insert(node.Statements.IndexOf(declareTableVariableStatement) + 1, deleteBeginEndBlockStatement);
    }
    base.Visit(node);
}

我找到了解决方案!

public override void Visit(StatementList node)
{
    foreach (DeclareTableVariableStatement declareTableVariableStatement in node.Statements.Where(a => a is DeclareTableVariableStatement).ToList())
    {
        BeginEndBlockStatement deleteBeginEndBlockStatement = new BeginEndBlockStatement()
        {
            StatementList = new StatementList()
        };

        DeleteStatement deleteStatement = new DeleteStatement()
        {
            DeleteSpecification = new DeleteSpecification()
            {
                Target = new VariableTableReference()
                {
                    Variable = new VariableReference()
                    {
                        Name = declareTableVariableStatement.Body.VariableName.Value
                    }
                }
            }
        };

        deleteBeginEndBlockStatement.StatementList.Statements.Add(deleteStatement);
        node.Statements.Insert(node.Statements.IndexOf(declareTableVariableStatement) + 1, deleteBeginEndBlockStatement);
    }
    base.Visit(node);
}