public static Expression Remove(Expression expression, IEnumerable<SelectExpression> selectsToRemove)
{
return new SubqueryRemover
{
map = selectsToRemove.ToDictionary(d => d.Alias, d => d.Columns.ToDictionary(d2 => d2.Name, d2 => d2.Expression)),
selectsToRemove = new HashSet<SelectExpression>(selectsToRemove)
}.Visit(expression);
}