Esempio n. 1
0
        public void ExecuteDynamicQueryObject()
        {
            var source = new List<Product>
                             {
                                 new Product {Name = "NPatterns", Version = 1.2},
                                 new Product {Name = "NPatterns.Messaging.IoC",Version = 1.1},
                                 new Product {Name = "NPatterns.ObjectRelational.EF",Version = 1.0},
                                 new Product {Name = null,Version = 0}
                             };

            var query = new QueryObject(new DynamicQueryObjectExecutor());
            query.Add(new Criteria { Field = "Name", Operator = CriteriaOperator.IsNotNull });

            var criteriaGroup = new CriteriaGroup { Operator = CriteriaGroupOperator.Or };
            criteriaGroup.Criterias.Add(new Criteria { Field = "Name", Operator = CriteriaOperator.IsEqualTo, Value = "npatterns" });
            criteriaGroup.Criterias.Add(new Criteria { Field = "Name", Operator = CriteriaOperator.EndsWith, Value = "ioc" });

            query.Add(criteriaGroup);
            query.Add(new SortDescription { Field = "Version", Direction = SortDirection.Ascending });

            var result = query.Execute(source.AsQueryable()).ToList();
            Assert.AreEqual(2, result.Count);
            Assert.IsTrue(result[0].Version < result[1].Version);

            query.Add(new Criteria { Field = "Version", Operator = CriteriaOperator.IsEqualTo, Value = 1.0 }, CriteriaGroupOperator.Or);
            var result2 = query.Execute(source.AsQueryable()).ToList();
            Assert.AreEqual(3, result2.Count);
        }
Esempio n. 2
0
 /// <summary>
 /// append criteria group with logical operator to this query object
 /// </summary>
 /// <param name="criteriaGroup">criteria group to add</param>
 /// <param name="op">AND|OR the criteria group</param>
 public void Add(CriteriaGroup criteriaGroup, CriteriaGroupOperator op = CriteriaGroupOperator.And)
 {
     _criteriaGroups.Add(
         new Tuple <CriteriaGroup, CriteriaGroupOperator>(
             criteriaGroup,
             op));
 }
Esempio n. 3
0
        public void ExecuteDynamicQueryObjectWithComplexType()
        {
            var source = new List<ProductFeature>
                             {
                                 new ProductFeature
                                     {
                                         Product = new Product {Name = "NPatterns", Version = 1.2},
                                         Feature = new Feature {Name = "IUnitOfWork"}
                                     },
                                 new ProductFeature
                                     {
                                         Product = new Product {Name = "NPatterns.Messaging.IoC", Version = 1.1},
                                         Feature = new Feature {Name = "MessageBus"}
                                     },
                                 new ProductFeature
                                     {
                                         Product = new Product {Name = "NPatterns.ObjectRelational.EF", Version = 1.0},
                                         Feature = new Feature {Name = "UnitOfWork"}
                                     },
                                 new ProductFeature
                                     {
                                         Product = new Product(),
                                         Feature = new Feature()
                                     }
                             };

            var query = new QueryObject(new DynamicQueryObjectExecutor());
            query.Add(new Criteria { Field = "Product.Name", Operator = CriteriaOperator.IsNotNull });

            var criteriaGroup = new CriteriaGroup { Operator = CriteriaGroupOperator.Or };
            criteriaGroup.Criterias.Add(new Criteria { Field = "Product.Name", Operator = CriteriaOperator.IsEqualTo, Value = "npatterns" });
            criteriaGroup.Criterias.Add(new Criteria { Field = "Product.Name", Operator = CriteriaOperator.EndsWith, Value = "ioc" });

            query.Add(criteriaGroup);
            var result = query.Execute(source.AsQueryable()).ToList();
            Assert.AreEqual(2, result.Count);

            query.Add(new Criteria { Field = "Product.Version", Operator = CriteriaOperator.IsEqualTo, Value = 1.0 }, CriteriaGroupOperator.Or);
            var result2 = query.Execute(source.AsQueryable()).ToList();
            Assert.AreEqual(3, result2.Count);
        }
Esempio n. 4
0
        public void SerializeCriteriaGroup()
        {
            var criteriaGroup = new CriteriaGroup { Operator = CriteriaGroupOperator.Or };
            criteriaGroup.Criterias.Add(new Criteria { Field = "Version", Operator = CriteriaOperator.IsEqualTo, Value = 1.0 });
            criteriaGroup.Criterias.Add(new Criteria { Field = "Name", Operator = CriteriaOperator.Contains, Value = "NPatterns" });

            var jsonString = JsonConvert.SerializeObject(criteriaGroup, new StringEnumConverter());
            var criteriaGroup2 = JsonConvert.DeserializeObject<CriteriaGroup>(jsonString, new StringEnumConverter());

            Assert.AreEqual(criteriaGroup.Operator, criteriaGroup2.Operator);
            Assert.AreEqual(criteriaGroup.Criterias.Count, criteriaGroup2.Criterias.Count);
            for (int i = 0; i < criteriaGroup.Criterias.Count; i++)
            {
                var criteria = criteriaGroup.Criterias[i];
                var criteria2 = criteriaGroup2.Criterias[i];
                Assert.AreEqual(criteria.Field, criteria2.Field);
                Assert.AreEqual(criteria.Operator, criteria2.Operator);
                Assert.AreEqual(criteria.Value, criteria2.Value);
            }
        }