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); }
/// <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)); }
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); }
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); } }