public override SqlFragment Visit(DbSortExpression expression)
        {
            SelectStatement select = VisitInputExpressionEnsureSelect(expression.Input.Expression,
                                                                      expression.Input.VariableName, expression.Input.VariableType);

            select = WrapIfNotCompatible(select, expression.ExpressionKind);

            foreach (DbSortClause sortClause in expression.SortOrder)
            {
                select.AddOrderBy(new SortFragment(
                                      sortClause.Expression.Accept(this), sortClause.Ascending));
            }
            return(select);
        }
        public override SqlFragment Visit(DbSkipExpression expression)
        {
            SelectStatement select = VisitInputExpressionEnsureSelect(expression.Input.Expression, expression.Input.VariableName,
                                                                      expression.Input.VariableType);

            select = WrapIfNotCompatible(select, DbExpressionKind.Sort);
            foreach (DbSortClause sortClause in expression.SortOrder)
            {
                select.AddOrderBy(
                    new SortFragment(sortClause.Expression.Accept(this), sortClause.Ascending));
            }

            // if we wrapped above, then this wrap will not create a new one so there
            // is no harm in calling it
            select      = WrapIfNotCompatible(select, expression.ExpressionKind);
            select.Skip = expression.Count.Accept(this);
            return(select);
        }