示例#1
0
        public OQuery Attach(OQuery src, IExpression expression)
        {
            if (expression is TakeExpression && expression.OQueryExpression != null)
            {
                src.Take(expression.OQueryExpression._top);
            }
            else if (expression is SkipExpression && expression.OQueryExpression != null)
            {
                src.Skip(expression.OQueryExpression._skip);
            }
            else if (expression is OrderExpression)
            {
                var orderExpression = (OrderExpression)expression;
                if (orderExpression.Descending)
                    src.OrderbyDesc(orderExpression.FieldName);
                else
                    src.Orderby(orderExpression.FieldName);
            }
            else if (expression is AndAlsoExpression)
            {
                var andAlsoExpression = (AndAlsoExpression) expression;
                if (andAlsoExpression.Left != null)
                    Attach(src, andAlsoExpression.Left);

                if (andAlsoExpression.Right != null)
                    Attach(src, andAlsoExpression.Right);
            }
            else if (expression is OrElseExpression)
            {
                var orElseExpression = (OrElseExpression) expression;
                if (orElseExpression.Left != null)
                    Attach(src, orElseExpression.Left);

                if (orElseExpression.Right != null)
                    Attach(src, orElseExpression.Right);

            }

            if (expression.OQueryExpression != null)
            {
                src.Attach(expression.OQueryExpression);
            }

            if (expression is Expression)
            {
                var exp = (Expression)expression;
                if (exp.InnerExpression != null)
                    return Attach(src, exp.InnerExpression);
            }

            return src;
        }