예제 #1
0
        private void BuildOrderBy(OrderByClause orderByClause)
        {
            bool propertySelect = false;

            if (_selectItemInfos.Count == 0)
            {
                if (OeExpressionHelper.IsTupleType(_visitor.Parameter.Type))
                {
                    return;
                }

                _selectItemInfos.Add(new SelectItemInfo(_visitor.Parameter));
            }
            else
            {
                propertySelect = _selectItemInfos.Any(i => i.PropertySelect);
            }

            while (orderByClause != null)
            {
                var propertyNode = (SingleValuePropertyAccessNode)orderByClause.Expression;
                orderByClause = orderByClause.ThenBy;

                if (SelectItemInfoExists(propertyNode.Property))
                {
                    continue;
                }
                if (!propertySelect && propertyNode.Source is ResourceRangeVariableReferenceNode)
                {
                    continue;
                }

                _selectItemInfos.Add(new SelectItemInfo(_visitor.Visit(propertyNode)));
            }
        }
예제 #2
0
        private OePropertyAccessor[] GetSkipTokenAccessors(IEdmModel edmModel, OrderByClause?orderByClause)
        {
            ParameterExpression parameter = Expression.Parameter(typeof(Object));
            Type clrEntityType            = edmModel.GetClrType(EntitySet);
            var  visitor = new OeQueryNodeVisitor(Expression.Parameter(clrEntityType));

            var skipTokenAccessors = new List <OePropertyAccessor>();

            while (orderByClause != null)
            {
                var propertyNode       = (SingleValuePropertyAccessNode)orderByClause.Expression;
                var propertyExpression = (MemberExpression)visitor.Visit(propertyNode);
                propertyExpression = OeExpressionHelper.ReplaceParameter(propertyExpression, parameter);
                skipTokenAccessors.Add(OePropertyAccessor.CreatePropertyAccessor(propertyNode.Property, propertyExpression, parameter, true));

                orderByClause = orderByClause.ThenBy;
            }

            return(skipTokenAccessors.ToArray());
        }