/// <summary>
        /// Creates a NavigationPropertySingletonExpression expression
        /// </summary>
        /// <param name="type">the return type of the expression</param>
        /// <param name="source">the source expression</param>
        /// <param name="memberExpression">property member name</param>
        /// <param name="resourceType">resource type for expression</param>
        /// <param name="expandPaths">expand paths for resource set</param>
        /// <param name="countOption">count option for the resource set</param>
        /// <param name="customQueryOptions">custom query options for resourcse set</param>
        /// <param name="projection">projection expression</param>
        /// <param name="resourceTypeAs">target expression type for a TypeAs conversion</param>
        /// <param name="uriVersion">version of the Uri from the expand and projection paths</param>
        internal NavigationPropertySingletonExpression(Type type, Expression source, Expression memberExpression, Type resourceType, List<string> expandPaths, CountOption countOption, Dictionary<ConstantExpression, ConstantExpression> customQueryOptions, ProjectionQueryOptionExpression projection, Type resourceTypeAs, Version uriVersion)
            : base(source, type, expandPaths, countOption, customQueryOptions, projection, resourceTypeAs, uriVersion)
        {
            Debug.Assert(memberExpression != null, "memberExpression != null");
            Debug.Assert(resourceType != null, "resourceType != null");

            this.memberExpression = memberExpression;
            this.resourceType = resourceType;
        }
Exemplo n.º 2
0
 /// <summary>
 /// Creates a Resource expression
 /// </summary>
 /// <param name="source">the source expression</param>
 /// <param name="type">the return type of the expression</param>
 /// <param name="expandPaths">the expand paths</param>
 /// <param name="countOption">the count option</param>
 /// <param name="customQueryOptions">The custom query options</param>
 /// <param name="projection">the projection expression</param>
 /// <param name="resourceTypeAs">TypeAs type</param>
 /// <param name="uriVersion">version of the Uri from the expand and projection paths</param>
 /// <param name="operationName">name of function</param>
 /// <param name="operationParameters">parameters' names and values of function</param>
 /// <param name="isAction">action flag</param>
 internal ResourceExpression(Expression source, Type type, List <string> expandPaths, CountOption countOption, Dictionary <ConstantExpression, ConstantExpression> customQueryOptions, ProjectionQueryOptionExpression projection, Type resourceTypeAs, Version uriVersion, string operationName, Dictionary <string, string> operationParameters, bool isAction)
 {
     this.source              = source;
     this.type                = type;
     this.expandPaths         = expandPaths ?? new List <string>();
     this.countOption         = countOption;
     this.customQueryOptions  = customQueryOptions ?? new Dictionary <ConstantExpression, ConstantExpression>(ReferenceEqualityComparer <ConstantExpression> .Instance);
     this.projection          = projection;
     this.ResourceTypeAs      = resourceTypeAs;
     this.uriVersion          = uriVersion ?? Util.ODataVersion4;
     this.operationName       = operationName;
     this.OperationParameters = operationParameters ?? new Dictionary <string, string>(StringComparer.Ordinal);
     this.isAction            = isAction;
 }
        /// <summary>
        /// Creates a navigation resource expression
        /// </summary>
        /// <param name="type">the return type of the expression</param>
        /// <param name="source">the source expression</param>
        /// <param name="memberExpression">property member name</param>
        /// <param name="resourceType">the element type of the resource</param>
        /// <param name="expandPaths">expand paths for resource set</param>
        /// <param name="countOption">count query option for the resource</param>
        /// <param name="customQueryOptions">custom query options for resource</param>
        /// <param name="projection">the projection expression</param>
        /// <param name="resourceTypeAs">TypeAs type</param>
        /// <param name="uriVersion">version of the Uri from the expand and projection paths</param>
        /// <param name="operationName">name of function</param>
        /// <param name="operationParameters">parameters' names and values of function</param>
        /// <param name="isAction">action flag</param>
        internal QueryableResourceExpression(Type type, Expression source, Expression memberExpression, Type resourceType, List<string> expandPaths, CountOption countOption, Dictionary<ConstantExpression, ConstantExpression> customQueryOptions, ProjectionQueryOptionExpression projection, Type resourceTypeAs, Version uriVersion, string operationName, Dictionary<string, string> operationParameters, bool isAction)
            : base(source, type, expandPaths, countOption, customQueryOptions, projection, resourceTypeAs, uriVersion, operationName, operationParameters, isAction)
        {
            Debug.Assert(type != null, "type != null");
            Debug.Assert(resourceType != null, "resourceType != null");
            Debug.Assert(
                (source == null && memberExpression is ConstantExpression) ||
                (source != null && memberExpression is MemberExpression) ||
                (memberExpression == null),
                "source is null with constant entity set name, or not null with member expression, or memberExpression is null for function import.");

            this.member = memberExpression;
            this.resourceType = resourceType;
            this.sequenceQueryOptions = new List<QueryOptionExpression>();
            this.keyPredicateConjuncts = new List<Expression>();
        }
 /// <summary>
 /// Creates a singleton resource expression
 /// </summary>
 /// <param name="type">the return type of the expression</param>
 /// <param name="source">the source expression</param>
 /// <param name="memberExpression">property member name</param>
 /// <param name="resourceType">the element type of the resource</param>
 /// <param name="expandPaths">expand paths for resource set</param>
 /// <param name="countOption">count query option for the resource</param>
 /// <param name="customQueryOptions">custom query options for resource</param>
 /// <param name="projection">the projection expression</param>
 /// <param name="resourceTypeAs">TypeAs type</param>
 /// <param name="uriVersion">version of the Uri from the expand and projection paths</param>
 /// <param name="functionName">name of function</param>
 /// <param name="functionParameters">parameters' names and values of function</param>
 /// <param name="isAction">action flag</param>
 internal SingletonResourceExpression(Type type, Expression source, Expression memberExpression, Type resourceType, List <string> expandPaths, CountOption countOption, Dictionary <ConstantExpression, ConstantExpression> customQueryOptions, ProjectionQueryOptionExpression projection, Type resourceTypeAs, Version uriVersion, string functionName, Dictionary <string, string> functionParameters, bool isAction) :
     base(type, source, memberExpression, resourceType, expandPaths, countOption, customQueryOptions, projection, resourceTypeAs, uriVersion, functionName, functionParameters, isAction)
 {
     UseFilterAsPredicate = true;
 }
        /// <summary>
        /// Creates a navigation resource expression
        /// </summary>
        /// <param name="type">the return type of the expression</param>
        /// <param name="source">the source expression</param>
        /// <param name="memberExpression">property member name</param>
        /// <param name="resourceType">the element type of the resource</param>
        /// <param name="expandPaths">expand paths for resource set</param>
        /// <param name="countOption">count query option for the resource</param>
        /// <param name="customQueryOptions">custom query options for resource</param>
        /// <param name="projection">the projection expression</param>
        /// <param name="resourceTypeAs">TypeAs type</param>
        /// <param name="uriVersion">version of the Uri from the expand and projection paths</param>
        /// <param name="operationName">name of function</param>
        /// <param name="operationParameters">parameters' names and values of function</param>
        /// <param name="isAction">action flag</param>
        internal QueryableResourceExpression(Type type, Expression source, Expression memberExpression, Type resourceType, List <string> expandPaths, CountOption countOption, Dictionary <ConstantExpression, ConstantExpression> customQueryOptions, ProjectionQueryOptionExpression projection, Type resourceTypeAs, Version uriVersion, string operationName, Dictionary <string, string> operationParameters, bool isAction)
            : base(source, type, expandPaths, countOption, customQueryOptions, projection, resourceTypeAs, uriVersion, operationName, operationParameters, isAction)
        {
            Debug.Assert(type != null, "type != null");
            Debug.Assert(resourceType != null, "resourceType != null");
            Debug.Assert(
                (source == null && memberExpression is ConstantExpression) ||
                (source != null && memberExpression is MemberExpression) ||
                (memberExpression == null),
                "source is null with constant entity set name, or not null with member expression, or memberExpression is null for function import.");

            this.member                = memberExpression;
            this.resourceType          = resourceType;
            this.sequenceQueryOptions  = new List <QueryOptionExpression>();
            this.keyPredicateConjuncts = new List <Expression>();
        }
 /// <summary>
 /// Creates a navigation resource expression
 /// </summary>
 /// <param name="type">the return type of the expression</param>
 /// <param name="source">the source expression</param>
 /// <param name="memberExpression">property member name</param>
 /// <param name="resourceType">the element type of the resource</param>
 /// <param name="expandPaths">expand paths for resource set</param>
 /// <param name="countOption">count query option for the resource</param>
 /// <param name="customQueryOptions">custom query options for resource</param>
 /// <param name="projection">the projection expression</param>
 /// <param name="resourceTypeAs">TypeAs type</param>
 /// <param name="uriVersion">version of the Uri from the expand and projection paths</param>
 internal QueryableResourceExpression(Type type, Expression source, Expression memberExpression, Type resourceType, List <string> expandPaths, CountOption countOption, Dictionary <ConstantExpression, ConstantExpression> customQueryOptions, ProjectionQueryOptionExpression projection, Type resourceTypeAs, Version uriVersion)
     : this(type, source, memberExpression, resourceType, expandPaths, countOption, customQueryOptions, projection, resourceTypeAs, uriVersion, null, null, false)
 {
 }
        /// <summary>
        /// Creates a navigation resource expression
        /// </summary>
        /// <param name="expressionType">The expression type.</param>
        /// <param name="type">the return type of the expression</param>
        /// <param name="source">the source expression</param>
        /// <param name="memberExpression">property member name</param>
        /// <param name="resourceType">the element type of the resource</param>
        /// <param name="expandPaths">expand paths for resource set</param>
        /// <param name="countOption">count query option for the resource</param>
        /// <param name="customQueryOptions">custom query options for resource</param>
        /// <param name="projection">the projection expression</param>
        /// <param name="resourceTypeAs">TypeAs type</param>
        /// <param name="uriVersion">version of the Uri from the expand and projection paths</param>
        /// <param name="operationName">The operation name.</param>
        /// <param name="operationParameters">The operation parameter names and parameters pair for Resource</param>
        /// <returns>The navigation resource expression.</returns>
        internal static QueryableResourceExpression CreateNavigationResourceExpression(ExpressionType expressionType, Type type, Expression source, Expression memberExpression, Type resourceType, List <string> expandPaths, CountOption countOption, Dictionary <ConstantExpression, ConstantExpression> customQueryOptions, ProjectionQueryOptionExpression projection, Type resourceTypeAs, Version uriVersion, string operationName, Dictionary <string, string> operationParameters)
        {
            Debug.Assert(
                expressionType == (ExpressionType)ResourceExpressionType.RootResourceSet || expressionType == (ExpressionType)ResourceExpressionType.ResourceNavigationProperty || expressionType == (ExpressionType)ResourceExpressionType.RootSingleResource,
                "Expression type is not one of following: RootResourceSet, ResourceNavigationProperty, RootSingleResource.");

            QueryableResourceExpression expression = null;

            if (expressionType == (ExpressionType)ResourceExpressionType.RootResourceSet || expressionType == (ExpressionType)ResourceExpressionType.ResourceNavigationProperty)
            {
                expression = new ResourceSetExpression(type, source, memberExpression, resourceType, expandPaths, countOption, customQueryOptions, projection, resourceTypeAs, uriVersion);
            }

            if (expressionType == (ExpressionType)ResourceExpressionType.RootSingleResource)
            {
                expression = new SingletonResourceExpression(type, source, memberExpression, resourceType, expandPaths, countOption, customQueryOptions, projection, resourceTypeAs, uriVersion);
            }

            if (expression != null)
            {
                expression.OperationName       = operationName;
                expression.OperationParameters = operationParameters;
                return(expression);
            }

            return(null);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Creates a NavigationPropertySingletonExpression expression
        /// </summary>
        /// <param name="type">the return type of the expression</param>
        /// <param name="source">the source expression</param>
        /// <param name="memberExpression">property member name</param>
        /// <param name="resourceType">resource type for expression</param>
        /// <param name="expandPaths">expand paths for resource set</param>
        /// <param name="countOption">count option for the resource set</param>
        /// <param name="customQueryOptions">custom query options for resource set</param>
        /// <param name="projection">projection expression</param>
        /// <param name="resourceTypeAs">target expression type for a TypeAs conversion</param>
        /// <param name="uriVersion">version of the Uri from the expand and projection paths</param>
        internal NavigationPropertySingletonExpression(Type type, Expression source, Expression memberExpression, Type resourceType, List <string> expandPaths, CountOption countOption, Dictionary <ConstantExpression, ConstantExpression> customQueryOptions, ProjectionQueryOptionExpression projection, Type resourceTypeAs, Version uriVersion)
            : base(source, type, expandPaths, countOption, customQueryOptions, projection, resourceTypeAs, uriVersion)
        {
            Debug.Assert(memberExpression != null, "memberExpression != null");
            Debug.Assert(resourceType != null, "resourceType != null");

            this.memberExpression = memberExpression;
            this.resourceType     = resourceType;
        }
 /// <summary>
 /// Creates a singleton resource expression
 /// </summary>
 /// <param name="type">the return type of the expression</param>
 /// <param name="source">the source expression</param>
 /// <param name="memberExpression">property member name</param>
 /// <param name="resourceType">the element type of the resource</param>
 /// <param name="expandPaths">expand paths for resource set</param>
 /// <param name="countOption">count query option for the resource</param>
 /// <param name="customQueryOptions">custom query options for resource</param>
 /// <param name="projection">the projection expression</param>
 /// <param name="resourceTypeAs">TypeAs type</param>
 /// <param name="uriVersion">version of the Uri from the expand and projection paths</param>
 /// <param name="functionName">name of function</param>
 /// <param name="functionParameters">parameters' names and values of function</param>
 /// <param name="isAction">action flag</param>
 internal SingletonResourceExpression(Type type, Expression source, Expression memberExpression, Type resourceType, List<string> expandPaths, CountOption countOption, Dictionary<ConstantExpression, ConstantExpression> customQueryOptions, ProjectionQueryOptionExpression projection, Type resourceTypeAs, Version uriVersion, string functionName, Dictionary<string, string> functionParameters, bool isAction) :
     base(type, source, memberExpression, resourceType, expandPaths, countOption, customQueryOptions, projection, resourceTypeAs, uriVersion, functionName, functionParameters, isAction)
 {
     UseFilterAsPredicate = true;
 }
Exemplo n.º 10
0
 /// <summary>
 /// Creates a resource set expression
 /// </summary>
 /// <param name="type">the return type of the expression</param>
 /// <param name="source">the source expression</param>
 /// <param name="memberExpression">property member name</param>
 /// <param name="resourceType">the element type of the resource</param>
 /// <param name="expandPaths">expand paths for resource set</param>
 /// <param name="countOption">count query option for the resource</param>
 /// <param name="customQueryOptions">custom query options for resource</param>
 /// <param name="projection">the projection expression</param>
 /// <param name="resourceTypeAs">TypeAs type</param>
 /// <param name="uriVersion">version of the Uri from the expand and projection paths</param>
 /// <param name="operationName">name of function</param>
 /// <param name="operationParameters">parameters' names and values of function</param>
 /// <param name="operationReturnType">return type of function</param>
 /// <param name="isAction">action flag</param>
 internal ResourceSetExpression(Type type, Expression source, Expression memberExpression, Type resourceType, List <string> expandPaths, CountOption countOption, Dictionary <ConstantExpression, ConstantExpression> customQueryOptions, ProjectionQueryOptionExpression projection, Type resourceTypeAs, Version uriVersion, string operationName, Dictionary <string, string> operationParameters, Type operationReturnType, bool isAction)
     : base(type, source, memberExpression, resourceType, expandPaths, countOption, customQueryOptions, projection, resourceTypeAs, uriVersion, operationName, operationParameters, operationReturnType, isAction)
 {
 }
Exemplo n.º 11
0
 /// <summary>
 /// Creates a resource set expression
 /// </summary>
 /// <param name="type">the return type of the expression</param>
 /// <param name="source">the source expression</param>
 /// <param name="memberExpression">property member name</param>
 /// <param name="resourceType">the element type of the resource</param>
 /// <param name="expandPaths">expand paths for resource set</param>
 /// <param name="countOption">count query option for the resource</param>
 /// <param name="customQueryOptions">custom query options for resource</param>
 /// <param name="projection">the projection expression</param>
 /// <param name="resourceTypeAs">TypeAs type</param>
 /// <param name="uriVersion">version of the Uri from the expand and projection paths</param>
 internal ResourceSetExpression(Type type, Expression source, Expression memberExpression, Type resourceType, List <string> expandPaths, CountOption countOption, Dictionary <ConstantExpression, ConstantExpression> customQueryOptions, ProjectionQueryOptionExpression projection, Type resourceTypeAs, Version uriVersion)
     : base(type, source, memberExpression, resourceType, expandPaths, countOption, customQueryOptions, projection, resourceTypeAs, uriVersion)
 {
 }
 /// <summary>
 /// Creates a navigation resource expression
 /// </summary>
 /// <param name="type">the return type of the expression</param>
 /// <param name="source">the source expression</param>
 /// <param name="memberExpression">property member name</param>
 /// <param name="resourceType">the element type of the resource</param>
 /// <param name="expandPaths">expand paths for resource set</param>
 /// <param name="countOption">count query option for the resource</param>
 /// <param name="customQueryOptions">custom query options for resource</param>
 /// <param name="projection">the projection expression</param>
 /// <param name="resourceTypeAs">TypeAs type</param>
 /// <param name="uriVersion">version of the Uri from the expand and projection paths</param>
 internal QueryableResourceExpression(Type type, Expression source, Expression memberExpression, Type resourceType, List<string> expandPaths, CountOption countOption, Dictionary<ConstantExpression, ConstantExpression> customQueryOptions, ProjectionQueryOptionExpression projection, Type resourceTypeAs, Version uriVersion)
     : this(type, source, memberExpression, resourceType, expandPaths, countOption, customQueryOptions, projection, resourceTypeAs, uriVersion, null, null, false)
 {
 }
        /// <summary>
        /// Creates a navigation resource expression
        /// </summary>
        /// <param name="expressionType">The expression type.</param>
        /// <param name="type">the return type of the expression</param>
        /// <param name="source">the source expression</param>
        /// <param name="memberExpression">property member name</param>
        /// <param name="resourceType">the element type of the resource</param>
        /// <param name="expandPaths">expand paths for resource set</param>
        /// <param name="countOption">count query option for the resource</param>
        /// <param name="customQueryOptions">custom query options for resource</param>
        /// <param name="projection">the projection expression</param>
        /// <param name="resourceTypeAs">TypeAs type</param>
        /// <param name="uriVersion">version of the Uri from the expand and projection paths</param>
        /// <param name="operationName">The operation name.</param>
        /// <param name="operationParameters">The operation parameter names and parameters pair for Resource</param>
        /// <returns>The navigation resource expression.</returns>
        internal static QueryableResourceExpression CreateNavigationResourceExpression(ExpressionType expressionType, Type type, Expression source, Expression memberExpression, Type resourceType, List<string> expandPaths, CountOption countOption, Dictionary<ConstantExpression, ConstantExpression> customQueryOptions, ProjectionQueryOptionExpression projection, Type resourceTypeAs, Version uriVersion, string operationName, Dictionary<string, string> operationParameters)
        {
            Debug.Assert(
                expressionType == (ExpressionType)ResourceExpressionType.RootResourceSet || expressionType == (ExpressionType)ResourceExpressionType.ResourceNavigationProperty || expressionType == (ExpressionType)ResourceExpressionType.RootSingleResource,
                "Expression type is not one of following: RootResourceSet, ResourceNavigationProperty, RootSingleResource.");

            QueryableResourceExpression expression = null;

            if (expressionType == (ExpressionType)ResourceExpressionType.RootResourceSet || expressionType == (ExpressionType)ResourceExpressionType.ResourceNavigationProperty)
            {
                expression = new ResourceSetExpression(type, source, memberExpression, resourceType, expandPaths, countOption, customQueryOptions, projection, resourceTypeAs, uriVersion);
            }

            if (expressionType == (ExpressionType)ResourceExpressionType.RootSingleResource)
            {
                expression = new SingletonResourceExpression(type, source, memberExpression, resourceType, expandPaths, countOption, customQueryOptions, projection, resourceTypeAs, uriVersion);
            }

            if (expression != null)
            {
                expression.OperationName = operationName;
                expression.OperationParameters = operationParameters;
                return expression;
            }

            return null;
        }
Exemplo n.º 14
0
 /// <summary>
 /// Creates a Resource expression
 /// </summary>
 /// <param name="source">the source expression</param>
 /// <param name="type">the return type of the expression</param>
 /// <param name="expandPaths">the expand paths</param>
 /// <param name="countOption">the count option</param>
 /// <param name="customQueryOptions">The custom query options</param>
 /// <param name="projection">the projection expression</param>
 /// <param name="resourceTypeAs">TypeAs type</param>
 /// <param name="uriVersion">version of the Uri from the expand and projection paths</param>
 /// <param name="operationName">name of function</param>
 /// <param name="operationParameters">parameters' names and values of function</param>
 /// <param name="isAction">action flag</param>
 internal ResourceExpression(Expression source, Type type, List<string> expandPaths, CountOption countOption, Dictionary<ConstantExpression, ConstantExpression> customQueryOptions, ProjectionQueryOptionExpression projection, Type resourceTypeAs, Version uriVersion, string operationName, Dictionary<string, string> operationParameters, bool isAction)
 {
     this.source = source;
     this.type = type;
     this.expandPaths = expandPaths ?? new List<string>();
     this.countOption = countOption;
     this.customQueryOptions = customQueryOptions ?? new Dictionary<ConstantExpression, ConstantExpression>(ReferenceEqualityComparer<ConstantExpression>.Instance);
     this.projection = projection;
     this.ResourceTypeAs = resourceTypeAs;
     this.uriVersion = uriVersion ?? Util.ODataVersion4;
     this.operationName = operationName;
     this.OperationParameters = operationParameters ?? new Dictionary<string, string>(StringComparer.Ordinal);
     this.isAction = isAction;
 }
Exemplo n.º 15
0
 /// <summary>
 /// Creates a resource set expression
 /// </summary>
 /// <param name="type">the return type of the expression</param>
 /// <param name="source">the source expression</param>
 /// <param name="memberExpression">property member name</param>
 /// <param name="resourceType">the element type of the resource</param>
 /// <param name="expandPaths">expand paths for resource set</param>
 /// <param name="countOption">count query option for the resource</param>
 /// <param name="customQueryOptions">custom query options for resource</param>
 /// <param name="projection">the projection expression</param>
 /// <param name="resourceTypeAs">TypeAs type</param>
 /// <param name="uriVersion">version of the Uri from the expand and projection paths</param>
 /// <param name="operationName">name of function</param>
 /// <param name="operationParameters">parameters' names and values of function</param>
 /// <param name="isAction">action flag</param>
 internal ResourceSetExpression(Type type, Expression source, Expression memberExpression, Type resourceType, List<string> expandPaths, CountOption countOption, Dictionary<ConstantExpression, ConstantExpression> customQueryOptions, ProjectionQueryOptionExpression projection, Type resourceTypeAs, Version uriVersion, string operationName, Dictionary<string, string> operationParameters, bool isAction)
     : base(type, source, memberExpression, resourceType, expandPaths, countOption, customQueryOptions, projection, resourceTypeAs, uriVersion, operationName, operationParameters, isAction)
 {
 }