/// <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 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); }
/// <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) { }
/// <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 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; }