/// <summary>
        /// Evaluates Prefix expression
        /// </summary>
        /// <param name="m">method call expression</param>
        private void VisitPrefix(MethodCallExpression m)
        {
            string prefix = (string)((ConstantExpression)m.Arguments[1]).Value;
            string iri    = (string)((ConstantExpression)m.Arguments[2]).Value;

            Prefixes.Add(SPARQL.Prefix(prefix, iri));
        }
        public void TestToString1()
        {
            var prefixes = new[] {
                SPARQL.Prefix("p1", "http://test.com/p1"),
                SPARQL.Prefix("p2", "http://test.com/p2"),
            };



            var source = TestDataProvider.GetQuerable <dynamic>("", prefixes: prefixes);

            var query = source.Prefix("p3", "http://test.com/p3")
                        .Prefix("p4", "http://test.com/p4")
                        .Prefix("p5", "http://test.com/p5");

            var resStr = query.ToString();

            resStr.Should().StartWith(
                @"PREFIX p1: <http://test.com/p1>
PREFIX p2: <http://test.com/p2>
PREFIX p3: <http://test.com/p3>
PREFIX p4: <http://test.com/p4>
PREFIX p5: <http://test.com/p5>"
                );
        }
 /// <summary>
 /// Makes triple from expression arguments
 /// </summary>
 /// <param name="m">method call arguments</param>
 /// <returns></returns>
 private Triple MakeTripleFromArguments(MethodCallExpression m)
 {
     return(SPARQL.Triple((string)((ConstantExpression)m.Arguments[1]).Value,
                          new List <string>()
     {
         string.Concat((string)((ConstantExpression)m.Arguments[2]).Value, " ", ((ConstantExpression)m.Arguments[3]).Value.ToString())
     }));
 }
        /// <summary>
        /// Evaluates Group expression
        /// </summary>
        /// <param name="m">method call expression</param>
        /// <returns>SPARQL Where clause item</returns>
        private IWhereItem VisitGroup(MethodCallExpression m)
        {
            var group = new Group(
                SPARQL.Triple((string)((ConstantExpression)m.Arguments[1]).Value,
                              new List <string>()
            {
                string.Concat((string)((ConstantExpression)m.Arguments[2]).Value, " ", (string)((ConstantExpression)m.Arguments[3]).Value)
            })
                );

            return(group);
        }
        /// <summary>
        /// Evaluates Either expression
        /// </summary>
        /// <param name="m">method call expression</param>
        /// <returns>SPARQL Where clause item</returns>
        private IWhereItem VisitEither(MethodCallExpression m)
        {
            var union = new Union(
                new Group(
                    SPARQL.Triple((string)((ConstantExpression)m.Arguments[1]).Value,
                                  new List <string>()
            {
                string.Concat((string)((ConstantExpression)m.Arguments[2]).Value, " ", (string)((ConstantExpression)m.Arguments[3]).Value)
            })
                    ),
                null
                );

            return(union);
        }
 private IWhereItem VisitBindAs(MethodCallExpression bind, MethodCallExpression asValue)
 {
     return(SPARQL.Bind(string.Concat((string)((ConstantExpression)bind.Arguments[1]).Value,
                                      " AS ",
                                      (string)((ConstantExpression)asValue.Arguments[1]).Value)));
 }
        /// <summary>
        /// Evaluates FilterBy expression
        /// </summary>
        /// <param name="m">method call expression</param>
        /// <returns>SPARQL Where clause item</returns>
        private IWhereItem VisitFilterBy(MethodCallExpression m)
        {
            var filter = SPARQL.Filter((string)((ConstantExpression)m.Arguments[1]).Value);

            return(filter);
        }