/// <summary>Creates a data service query for function which return collection of data.</summary> /// <typeparam name="T">The type returned by the query</typeparam> /// <param name="functionName">The function name.</param> /// <param name="isComposable">Whether this query is composable.</param> /// <param name="parameters">The function parameters.</param> /// <returns>A new <see cref="T:Microsoft.OData.Client.DataServiceQuery`1" /> instance that represents the function call.</returns> public DataServiceQuery <T> CreateFunctionQuery <T>(string functionName, bool isComposable, params UriOperationParameter[] parameters) { Dictionary <string, string> operationParameters = this.Context.SerializeOperationParameters(parameters); ResourceSetExpression rse = new ResourceSetExpression(typeof(IOrderedQueryable <T>), this.Expression, null, typeof(T), null, CountOption.None, null, null, null, null, functionName, operationParameters, false); return(new DataServiceQuery <T> .DataServiceOrderedQuery(rse, new DataServiceQueryProvider(this.Context), isComposable)); }
/// <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 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; }