Exemplo n.º 1
0
        public override object Execute(Expression expression)
        {
            var resourceValue   = _basePath.Substring(0, _basePath.LastIndexOf('/'));
            var translateResult = Translate(expression);
            var projector       = translateResult.Projector.Compile();
            var query           = CreateCosmosQueryJson(translateResult.CommandText, null);
            var responses       = HttpRequestHelper.GetResourceResult("post", _uri, _apiKey, _basePath, resourceValue, query, isQuery: true).Result;

            Type type = TypeSystemHelper.GetElementType(expression.Type);
            var  list = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(type));
            var  serializationType = typeof(IEnumerable <>).MakeGenericType(type);

            foreach (var response in responses)
            {
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    throw new CosmosQueryException(response.Body);
                }

                var cosmosQueryResponse = _serializer.Deserailize <CosmosQueryResponse>(response.Body);
                var items = _serializer.Deserialize(cosmosQueryResponse.Documents.ToString(), serializationType);

                foreach (var item in (ICollection)items)
                {
                    list.Add(item);
                }
            }
            return(list);
        }
Exemplo n.º 2
0
        public IQueryable CreateQuery(Expression expression)
        {
            var elementType = TypeSystemHelper.GetElementType(expression.Type);

            try
            {
                return((IQueryable)Activator.CreateInstance(typeof(CosmosQueryable <>).MakeGenericType(elementType), new object[] { this, expression }));
            }
            catch (TargetInvocationException tie)
            {
                throw tie.InnerException;
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Add the expression (x => _type == "Type.FullName" to the expression tree.
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        internal static Expression Inject(Expression expression)
        {
            var type                  = TypeSystemHelper.GetElementType(expression.Type);
            var targetExpression      = Expression.Parameter(type, "x");
            var namespaceExpression   = Expression.Constant(type.FullName);
            var stellerTypeExpression = Expression.Constant("_type");
            var equalExp              = Expression.Equal(stellerTypeExpression, namespaceExpression);
            var queryableType         = typeof(Queryable);
            var whereMethod           = queryableType.GetMethods().First(m =>
            {
                var parameters = m.GetParameters().ToList();
                return(m.Name == "Where" && m.IsGenericMethodDefinition && parameters.Count == 2);
            });
            var whereClause   = Expression.Lambda(equalExp, new ParameterExpression[] { targetExpression });
            var genericMethod = whereMethod.MakeGenericMethod(type);
            var exp           = Expression.Call(genericMethod, expression, whereClause);

            return(exp);
        }