public static string SubqueryToSql(Expression expr, SqlExprParams pars) { var selectCall = expr; var callSub = SqlFromList.ReplaceSubqueryBody(selectCall, pars.Replace); var subqueryFunc = Expression.Lambda(callSub).Compile(); var subqueryExec = (ISqlSelectHasClause)subqueryFunc.DynamicInvoke(new object[0]); var selectStr = SqlSelect.TabStr(SqlSelect.SelectToString(subqueryExec.Clause, pars.ParamMode, pars.ParamDic)); return($"({Environment.NewLine}{selectStr}{Environment.NewLine})"); }
/// <summary> /// Agrega los parentesis si subQ es true /// </summary> static string SubqueryParenthesis(StatementToStrResult fromList) { switch (fromList) { case QueryToStrResult _: return $"({Environment.NewLine}{SqlSelect.TabStr(fromList.Sql)}{Environment.NewLine})"; case TableToStrResult _: return fromList.Sql; default: throw new ArgumentException(); } }
public static string ConditionalToSql(ConditionalExpression expr, SqlExprParams pars) { var b = new StringBuilder(); Expression curr = expr; while (curr is ConditionalExpression cond) { b.Append("WHEN "); b.Append(ExprToSql(cond.Test, pars, false)); b.Append(" THEN "); b.Append(ExprToSql(cond.IfTrue, pars, false)); b.AppendLine(); curr = cond.IfFalse; } b.Append("ELSE "); b.Append(ExprToSql(curr, pars, false)); return(SqlSelect.TabStr($"{Environment.NewLine}CASE{Environment.NewLine}{SqlSelect.TabStr(b.ToString())}{Environment.NewLine}END")); }