public async Task <string> Generate()
        {
            var visitor = new AmoCrmGetPairsVisitor();

            foreach (var exp in Expressions)
            {
                Expression modifiedExpr = visitor.Apply((Expression)exp);
            }

            visitor.Pairs.Distinct(new QueryKeyPairEqualityComparer());

            var queryString = await new FormUrlEncodedContent(visitor.Pairs).ReadAsStringAsync();

            return(string.IsNullOrEmpty(queryString) ? "" : "?" + queryString);
        }
        public void Get()
        {
            var visitor = new AmoCrmGetPairsVisitor();

            Expression <Func <ContactFilter, bool> > exp1 = x => x.Id == 12;
            Expression <Func <ContactFilter, bool> > exp2 = x => x.Name == "Odod";

            var list = new List <Expression>()
            {
                exp1, exp2
            };

            foreach (var exp in list)
            {
                Expression modifiedExpr = visitor.Apply((Expression)exp);
            }

            Assert.AreEqual(visitor.Pairs.Count(), 2);
        }
        public void DistinctKeysAndValues()
        {
            var visitor = new AmoCrmGetPairsVisitor();

            Expression <Func <ContactFilter, bool> > exp1 = x => x.Id == 12;
            Expression <Func <ContactFilter, bool> > exp2 = x => x.Id == 12;
            Expression <Func <ContactFilter, bool> > exp3 = x => x.Id == 13;

            var list = new List <Expression>()
            {
                exp1, exp2, exp3
            };

            foreach (var exp in list)
            {
                Expression modifiedExpr = visitor.Apply((Expression)exp);
            }

            // There is just one value of id
            Assert.IsNotNull(visitor.Pairs.FirstOrDefault(x => x.Key == "id[]"));
            Assert.AreEqual(visitor.Pairs.Where(x => x.Key == "id[]").Count(), 2);
        }