Пример #1
0
 private void BuildCompute(ComputeClause computeClause)
 {
     foreach (ComputeExpression computeExpression in computeClause.ComputedItems)
     {
         Expression        expression       = _visitor.TranslateNode(computeExpression.Expression);
         IEdmTypeReference edmTypeReference = OeEdmClrHelper.GetEdmTypeReference(_visitor.EdmModel, expression.Type);
         _navigationItem.AddSelectItem(new OeSelectItem(new ComputeProperty(computeExpression.Alias, edmTypeReference, expression), false));
     }
 }
Пример #2
0
        private IEnumerable <KeyValuePair <String, Object> > GetKeys(T entity)
        {
            var           visitor       = new OeQueryNodeVisitor(_edmModel, Expression.Parameter(typeof(T)));
            OrderByClause orderByClause = _odataUri.OrderBy;

            do
            {
                var             propertyExpression = (MemberExpression)visitor.TranslateNode(orderByClause.Expression);
                UnaryExpression body = Expression.Convert(propertyExpression, typeof(Object));
                Expression <Func <T, Object> > getValueLambda = Expression.Lambda <Func <T, Object> >(body, visitor.Parameter);
                Object value = getValueLambda.Compile()(entity);

                yield return(new KeyValuePair <String, Object>(OeSkipTokenParser.GetPropertyName(propertyExpression), value));

                orderByClause = orderByClause.ThenBy;
            }while (orderByClause != null);
        }
        private static void SetOrderByProperties(OeQueryContext queryContext, Object entity, Object value)
        {
            var visitor = new OeQueryNodeVisitor(queryContext.EdmModel, Expression.Parameter(typeof(T)));
            var setPropertyValueVisitor = new SetPropertyValueVisitor();

            int           i             = 0;
            OrderByClause orderByClause = queryContext.ODataUri.OrderBy;

            while (orderByClause != null)
            {
                var    propertyExpression = (MemberExpression)visitor.TranslateNode(orderByClause.Expression);
                Object orderValue         = queryContext.SkipTokenAccessors[i++].GetValue(value);
                setPropertyValueVisitor.SetPropertyValue(entity, propertyExpression, orderValue);

                orderByClause = orderByClause.ThenBy;
            }
        }
        private void SetOrderByProperties(Object entity, Object value)
        {
            var visitor = new OeQueryNodeVisitor(_skipTokenParser.EdmModel, Expression.Parameter(typeof(T)));
            var setPropertyValueVisitor = new SetPropertyValueVisitor();

            int           i             = 0;
            OrderByClause orderByClause = _skipTokenParser.UniqueOrderBy;

            while (orderByClause != null)
            {
                var    propertyExpression = (MemberExpression)visitor.TranslateNode(orderByClause.Expression);
                Object orderValue         = _skipTokenParser.Accessors[i++].Accessor(value);
                setPropertyValueVisitor.SetPropertyValue(entity, propertyExpression, orderValue);

                orderByClause = orderByClause.ThenBy;
            }
        }
Пример #5
0
        private MethodCallExpression ApplyCompute(Expression source, ComputeTransformationNode transformation)
        {
            var expressions = new List <Expression>();

            Type sourceType = OeExpressionHelper.GetCollectionItemType(source.Type);
            ParameterExpression sourceParameter = Expression.Parameter(sourceType);

            if (_aggProperties.Count > 0)
            {
                var callExpression = (MethodCallExpression)source;
                source = callExpression.Arguments[0];
                var aggLambda = (LambdaExpression)callExpression.Arguments[1];
                expressions.AddRange(((NewExpression)aggLambda.Body).Arguments);

                sourceType      = OeExpressionHelper.GetCollectionItemType(source.Type);
                sourceParameter = aggLambda.Parameters[0];
            }

            OeQueryNodeVisitor visitor = CreateVisitor(sourceParameter);

            if (_aggProperties.Count > 0)
            {
                visitor.TuplePropertyByAliasName = new ComputeAliasNameResolver(_aggProperties, expressions).GetTuplePropertyByAliasName;
            }

            foreach (ComputeExpression computeExpression in transformation.Expressions)
            {
                Expression expression = visitor.TranslateNode(computeExpression.Expression);
                expressions.Add(expression);

                _aggProperties.Add(CreateEdmProperty(visitor.EdmModel, expression.Type, computeExpression.Alias, false));
            }

            NewExpression    newExpression    = OeExpressionHelper.CreateTupleExpression(expressions);
            MethodInfo       selectMethodInfo = OeMethodInfoHelper.GetSelectMethodInfo(sourceParameter.Type, newExpression.Type);
            LambdaExpression lambda           = Expression.Lambda(newExpression, sourceParameter);

            return(Expression.Call(selectMethodInfo, source, lambda));
        }