예제 #1
0
 public static void StringConditions(IDictionary <string, IReferenceTypeCondition <string> > conditions)
 {
     conditions["none"]             = new ReferenceTypeNoneCondition <string>("None");
     conditions["equal"]            = new ReferenceTypeEqualCondition <string>("Equal");
     conditions["notequal"]         = new ReferenceTypeNotEqualCondition <string>("NotEqual");
     conditions["contains"]         = new ContainsCondition("Contains");
     conditions["startswith"]       = new StartsWithCondition("StartsWith");
     conditions["endtswith"]        = new EndsWithCondition("EndsWith");
     conditions["isnullorempty"]    = new IsNullOrEmptyCondition("IsNullOrEmpty");
     conditions["isnotnullorempty"] = new IsNotNullOrEmptyCondition("IsNotNullOrEmpty");
 }
예제 #2
0
        public void ReferenceTypeNoneCondition()
        {
            var referenceTypeNoneCondition = new ReferenceTypeNoneCondition <string>();

            var expr1 = referenceTypeNoneCondition.For <TestSource>(x => x.Name);

            Assert.IsNull(expr1);

            referenceTypeNoneCondition.Value = new FilterValue <string>
            {
                LeftValue  = "123",
                RightValue = "1",
                Values     = new List <string> {
                    "1", "2", "3", "34"
                }
            };

            var expr2 = referenceTypeNoneCondition.For <TestSource>(x => x.Name);

            Assert.IsNull(expr2);
        }
        public void ReferenceTypeConditionBuilder()
        {
            var filter = new ReferenceTypeFilter <User, string>();

            filter.For(x => x.Guid);

            filter.Conditions(conditions =>
            {
                conditions["none"]      = new ReferenceTypeNoneCondition <string>();
                conditions["equal"]     = new ReferenceTypeEqualCondition <string>();
                conditions["isin"]      = new ReferenceTypeIsInCondition <string>();
                conditions["isnull"]    = new ReferenceTypeIsNullCondition <string>();
                conditions["isnotnull"] = new ReferenceTypeIsNotNullCondition <string>();
            });

            filter.ConditionBuilder((filterValue, condition, conditionKey) =>
            {
                var expression = condition(filterValue);
                if (expression == null)
                {
                    return(null);
                }

                switch (conditionKey)
                {
                case "isnotnull":
                    {
                        return(Linq.Expr <Task, bool>(x => x.Users.AsQueryable().Any()));
                    }

                case "isnull":
                    {
                        return(Linq.Expr <Task, bool>(x => !x.Users.AsQueryable().Any()));
                    }

                default:    //for equal,isin
                    {
                        return(Linq.Expr <Task, bool>(x => x.Users.AsQueryable().Any(expression)));
                    }
                }
            });

            filter.Init(new FilterValue <string>
            {
                LeftValue    = "1",
                ConditionKey = "equal"
            });

            var expr1 = filter.BuildExpression <User>();

            Assert.IsNull(expr1);

            var epxr2 = filter.BuildExpression <Task>();

            Assert.IsNotNull(epxr2);

            var tasksAnyUserId1 = filter.ApplyFilter(Source);

            Assert.IsTrue(tasksAnyUserId1.Count() == 1);


            filter.Init(new FilterValue <string>
            {
                ConditionKey = "isnotnull"
            });


            var tasksAnyUsers = filter.ApplyFilter(Source);

            Assert.IsTrue(tasksAnyUsers.Count() == 3);

            filter.Init(new FilterValue <string>
            {
                ConditionKey = "isnull"
            });

            var tasksNotAnyUsers = filter.ApplyFilter(Source);

            Assert.IsTrue(tasksNotAnyUsers.Count() == 1);


            filter.Init(new FilterValue <string>
            {
                ConditionKey = "isin",
                Values       = new List <string> {
                    "1", "5"
                }
            });

            var tasksIsInUser1User5 = filter.ApplyFilter(Source);

            Assert.IsTrue(tasksIsInUser1User5.Count() == 2);
        }