예제 #1
0
        private IEdmExpression ComputeValue()
        {
            IEdmTypeReference  termType           = Term is UnresolvedVocabularyTerm ? null : Term.Type;
            CsdlExpressionBase adjustedExpression = AdjustStringConstantUsingTermType((this.Annotation).Expression, termType);

            return(CsdlSemanticsModel.WrapExpression(adjustedExpression, TargetBindingContext, this.Schema));
        }
예제 #2
0
        private IEnumerable <IEdmExpression> ComputeElements()
        {
            List <IEdmExpression> elements = new List <IEdmExpression>();

            foreach (CsdlExpressionBase elementValue in this.expression.ElementValues)
            {
                elements.Add(CsdlSemanticsModel.WrapExpression(elementValue, this.bindingContext, this.Schema));
            }

            return(elements);
        }
        private IEdmExpression ComputeAppliedOperation()
        {
            if (this.expression.Function == null)
            {
                return(CsdlSemanticsModel.WrapExpression(this.expression.Arguments.FirstOrDefault(null), this.bindingContext, this.schema));
            }
            else
            {
                IEdmOperation referenced;
                IEnumerable <IEdmOperation> candidateOperations = this.schema.FindOperations(this.expression.Function);
                int candidateCount = candidateOperations.Count();
                if (candidateCount == 0)
                {
                    referenced = new UnresolvedOperation(this.expression.Function, Edm.Strings.Bad_UnresolvedOperation(this.expression.Function), this.Location);
                }
                else
                {
                    candidateOperations = candidateOperations.Where(this.IsMatchingFunction);
                    candidateCount      = candidateOperations.Count();
                    if (candidateCount > 1)
                    {
                        candidateOperations = candidateOperations.Where(this.IsExactMatch);
                        candidateCount      = candidateOperations.Count();
                        if (candidateCount != 1)
                        {
                            referenced = new UnresolvedOperation(this.expression.Function, Edm.Strings.Bad_AmbiguousOperation(this.expression.Function), this.Location);
                        }
                        else
                        {
                            referenced = candidateOperations.Single();
                        }
                    }
                    else if (candidateCount == 0)
                    {
                        referenced = new UnresolvedOperation(this.expression.Function, Edm.Strings.Bad_OperationParametersDontMatch(this.expression.Function), this.Location);
                    }
                    else
                    {
                        referenced = candidateOperations.Single();
                    }
                }

                return(new Library.Expressions.EdmOperationReferenceExpression(referenced));
            }
        }
예제 #4
0
        private IEnumerable <IEdmExpression> ComputeArguments()
        {
            bool skipFirst = this.expression.Function == null;
            List <IEdmExpression> result = new List <IEdmExpression>();

            foreach (CsdlExpressionBase argument in this.expression.Arguments)
            {
                if (skipFirst)
                {
                    skipFirst = false;
                }
                else
                {
                    result.Add(CsdlSemanticsModel.WrapExpression(argument, this.bindingContext, this.schema));
                }
            }

            return(result);
        }
 private IEdmExpression ComputeExpression()
 {
     return(CsdlSemanticsModel.WrapExpression(this.sourceElement, this.BindingContext, this.schema));
 }
 private IEdmExpression ComputeOperand()
 {
     return(CsdlSemanticsModel.WrapExpression(this.expression.Operand, this.bindingContext, this.Schema));
 }
 private IEdmExpression ComputeValue()
 {
     return(CsdlSemanticsModel.WrapExpression(this.property.Expression, this.context.BindingContext, this.context.Schema));
 }
예제 #8
0
 private IEdmExpression ComputeIfFalse()
 {
     return(CsdlSemanticsModel.WrapExpression(this.expression.IfFalse, this.BindingContext, this.Schema));
 }
 private IEdmExpression ComputeValue()
 {
     return(CsdlSemanticsModel.WrapExpression((this.Annotation).Expression, TargetBindingContext, this.Schema));
 }
예제 #10
0
 private IEdmExpression ComputeBase()
 {
     return((this.expression.BaseExpression != null) ? CsdlSemanticsModel.WrapExpression(this.expression.BaseExpression, this.bindingContext, this.Schema) : null);
 }