protected override DbExpression VisitDeleteExpression(DbDeleteExpression deleteExpression)
{
var sb = new StringBuilder();
if (deleteExpression.Target.ExpressionType == DbExpressionType.Alias)
sb.AppendFormat("DELETE {0} FROM {1} ", ((DbAliasExpression) deleteExpression.Target).Alias,Visit(deleteExpression.Target));
else
{
if (deleteExpression.FromExpression.IsNull())
{
sb.AppendFormat("DELETE FROM {0} ", Visit(deleteExpression.Target));
}
else
{
var aliasExpression = deleteExpression.FromExpression.Find<DbAliasExpression>(ae => ae.Target.Equals(deleteExpression.Target)).FirstOrDefault();
if (aliasExpression.IsNull())
sb.AppendFormat("DELETE {0} ", Visit(deleteExpression.Target));
else
sb.AppendFormat("DELETE {0} ", aliasExpression.Alias);
sb.AppendLine();
sb.AppendLine("FROM ");
sb.AppendFormat(1, "{0} ", Visit(deleteExpression.FromExpression));
}
}
if (!deleteExpression.WhereExpression.IsNull())
{
sb.AppendLine();
sb.AppendLine("WHERE ");
sb.AppendFormat(1, "{0} ", Visit(deleteExpression.WhereExpression));
}
return ExpressionFactory.Sql(sb.ToString().Trim());
}