public static void GetSparqlExpression(Expression expression, SparqlQueryBuilder queryBuilder)
        {
            var visitor          = new SparqlGeneratorSelectExpressionTreeVisitor(queryBuilder);
            var resultExpression = visitor.VisitExpression(expression);

            if (resultExpression is SelectIdentifierVariableNameExpression)
            {
                var selectId  = resultExpression as SelectIdentifierVariableNameExpression;
                var selectVar = queryBuilder.NextVariable();
                queryBuilder.AddBindExpression("STRAFTER(STR(?" + selectId.Name + "), " + SparqlQueryBuilder.QuoteLiteralString(selectId.IdentifierPrefix) + ")", selectVar);
                queryBuilder.AddSelectVariable(selectVar);
            }
            else if (resultExpression is SelectVariableNameExpression)
            {
                queryBuilder.AddSelectVariable((resultExpression as SelectVariableNameExpression).Name);
            }
        }
예제 #2
0
        public static void GetSparqlExpression(Expression expression, SparqlQueryBuilder queryBuilder)
        {
            var visitor          = new SparqlGeneratorSelectExpressionTreeVisitor(queryBuilder);
            var resultExpression = visitor.VisitExpression(expression);

            if (resultExpression is SelectVariableNameExpression)
            {
                queryBuilder.AddSelectVariable((resultExpression as SelectVariableNameExpression).Name);
            }
        }
        protected override Expression VisitMemberInitExpression(MemberInitExpression expression)
        {
            _queryBuilder.MemberInitExpression = expression;
            _queryBuilder.Constructor          = expression.NewExpression.Constructor;
            foreach (var a in expression.NewExpression.Arguments)
            {
                var mappedExpression = VisitExpression(a);
                if (mappedExpression is SelectVariableNameExpression)
                {
                    _queryBuilder.ConstructorArgs.Add((mappedExpression as SelectVariableNameExpression).Name);
                    _queryBuilder.AddSelectVariable((mappedExpression as SelectVariableNameExpression).Name);
                }
                else
                {
                    throw new NotSupportedException(
                              String.Format(
                                  "Unable to map constructor expression to a SPARQL results variable. Only simple property expressions are currently supported. Invalid expression is: {0}",
                                  a));
                }
            }

            var updatedBindings = new List <MemberBinding>();

            foreach (var b in expression.Bindings)
            {
                updatedBindings.Add(VisitMemberBinding(b));
            }
#if WINDOWS_PHONE || PORTABLE
            var updatedExpression = Expression.MemberInit(expression.NewExpression, updatedBindings);
#else
            var updatedExpression = expression.Update(expression.NewExpression, updatedBindings);
#endif
            _queryBuilder.MemberInitExpression = updatedExpression;
            return(updatedExpression);
        }