private void SelectExistingScalarProperties(ClientQueryInternal query) { foreach (string current in this.m_objectData.Properties.Keys) { query.Select(current); } }
public void Retrieve(params string[] propertyNames) { ClientQueryInternal query = this.Query; if (propertyNames == null) { return; } for (int i = 0; i < propertyNames.Length; i++) { string propertyName = propertyNames[i]; query.Select(propertyName); } }
private static ClientQueryInternal ProcessMemberAccessQueryExpression(ClientQueryInternal rootQuery, ClientObject rootClientObject, MemberExpression exp, bool leaf, DataRetrieval.QueryProcessInfo queryInfo, DataRetrieval.QueryMethodAggregator aggregator) { //Edited for .NET Core //if (exp.Member.MemberType != MemberTypes.Property || exp.Member.GetCustomAttributes(typeof(RemoteAttribute), false).Length <= 0) if (exp.Member.MemberType != MemberTypes.Property || exp.Member.GetCustomAttributes(typeof(RemoteAttribute), false).Count() <= 0) { throw DataRetrieval.CreateInvalidQueryExpressionException(exp); } ClientQueryInternal clientQueryInternal = DataRetrieval.ProcessQueryExpression(rootQuery, rootClientObject, exp.Expression, false, queryInfo, aggregator); aggregator.Member++; if (clientQueryInternal == null) { throw new InvalidQueryExpressionException(); } ClientQueryInternal clientQueryInternal2; //if (typeof(ClientObject).IsAssignableFrom(exp.Type)) if (typeof(ClientObject).GetTypeInfo().IsAssignableFrom(exp.Type)) { clientQueryInternal2 = clientQueryInternal.GetSubQuery(exp.Member.Name); if (clientQueryInternal2 == null) { clientQueryInternal2 = new ClientQueryInternal(null, exp.Member.Name, true, clientQueryInternal); clientQueryInternal.SelectSubQuery(clientQueryInternal2); } if (leaf) { clientQueryInternal.SelectWithAll(exp.Member.Name); } } else { clientQueryInternal.Select(exp.Member.Name); clientQueryInternal2 = null; } return(clientQueryInternal2); }
private static ClientQueryInternal ProcessMethodCallQueryExpression(ClientQueryInternal rootQuery, ClientObject rootClientObject, MethodCallExpression exp, bool leaf, DataRetrieval.QueryProcessInfo queryInfo, DataRetrieval.QueryMethodAggregator aggregator) { ClientQueryInternal result; if (exp.Method.IsGenericMethod && (exp.Method.DeclaringType == typeof(Enumerable) || exp.Method.DeclaringType == typeof(System.Linq.Queryable))) { result = DataRetrieval.ProcessClientQueryableMethodCallQueryExpression(rootQuery, rootClientObject, exp, leaf, queryInfo, aggregator); } else if (exp.Method.IsGenericMethod && exp.Method.DeclaringType == typeof(ClientObjectQueryableExtension) && (exp.Method.Name == "Include" || exp.Method.Name == "IncludeWithDefaultProperties")) { if (exp.Arguments.Count != 2) { throw DataRetrieval.CreateInvalidQueryExpressionException(exp); } IEnumerable <Expression> enumerable = null; NewArrayExpression newArrayExpression = exp.Arguments[1] as NewArrayExpression; if (newArrayExpression == null) { Expression expression = ExpressionEvaluator.PartialEvaluate(exp.Arguments[1], new Func <Expression, bool>(DataRetrieval.ExpectConstantExpression_CanExpressionBeEvaluated)); if (expression.NodeType == ExpressionType.Constant) { ConstantExpression constantExpression = (ConstantExpression)expression; enumerable = (constantExpression.Value as IEnumerable <Expression>); } if (enumerable == null) { throw DataRetrieval.CreateInvalidQueryExpressionException(exp); } } else { enumerable = newArrayExpression.Expressions; } ClientQueryInternal clientQueryInternal = DataRetrieval.ProcessQueryExpression(rootQuery, rootClientObject, exp.Arguments[0], false, queryInfo, aggregator); aggregator.Include++; if (clientQueryInternal == null) { throw DataRetrieval.CreateInvalidQueryExpressionException(exp); } queryInfo.ByInclude[clientQueryInternal.ChildItemQuery.Id] = clientQueryInternal.ChildItemQuery; ClientQueryInternal childItemQuery = clientQueryInternal.ChildItemQuery; if (exp.Method.Name == "IncludeWithDefaultProperties") { childItemQuery.SelectAllProperties(); } foreach (Expression current in enumerable) { Expression expression2 = ExpressionUtility.StripQuotes(current); LambdaExpression lambdaExpression = expression2 as LambdaExpression; if (lambdaExpression == null) { expression2 = ExpressionEvaluator.PartialEvaluate(expression2, new Func <Expression, bool>(DataRetrieval.ExpectConstantExpression_CanExpressionBeEvaluated)); ConstantExpression constantExpression2 = expression2 as ConstantExpression; if (constantExpression2 != null) { lambdaExpression = (constantExpression2.Value as LambdaExpression); } if (lambdaExpression == null) { throw DataRetrieval.CreateInvalidQueryExpressionException(expression2); } } Expression exp2 = lambdaExpression.Body; exp2 = ExpressionUtility.StripConverts(exp2); DataRetrieval.QueryMethodAggregator queryMethodAggregator = new DataRetrieval.QueryMethodAggregator(current); DataRetrieval.ProcessQueryExpression(childItemQuery, null, exp2, true, queryInfo, queryMethodAggregator); queryMethodAggregator.Check(); } result = clientQueryInternal; } else { if (!ExpressionUtility.IsGetFieldValueMethod(exp.Method)) { throw DataRetrieval.CreateInvalidQueryExpressionException(exp); } ClientQueryInternal clientQueryInternal2 = DataRetrieval.ProcessQueryExpression(rootQuery, rootClientObject, exp.Object, false, queryInfo, aggregator); aggregator.Member++; if (clientQueryInternal2 == null) { throw DataRetrieval.CreateInvalidQueryExpressionException(exp); } Expression expression3 = exp.Arguments[0]; expression3 = ExpressionEvaluator.PartialEvaluate(expression3, new Func <Expression, bool>(DataRetrieval.ExpectConstantExpression_CanExpressionBeEvaluated)); if (expression3.NodeType != ExpressionType.Constant || expression3.Type != typeof(string)) { throw DataRetrieval.CreateInvalidQueryExpressionException(exp); } ConstantExpression constantExpression3 = (ConstantExpression)expression3; clientQueryInternal2.Select((string)constantExpression3.Value); result = null; } return(result); }